zoukankan      html  css  js  c++  java
  • springboot加强

    1.SpringBoot配置文件:修改springboot配置的默认值  

    a)  配置文件名称:application.properties或application.yml

                     i.     application.properties传统方式,不是很优美规范

                    ii.     application.yml: 冒号后面必须加上一个空格,且属性和值是大小写敏感的

    1. 配置例子语法

    a)  server:

                                                       port: 8081

                                                       path: /hello
                                                                 

    b)  在yml配置文件配置对象的属性和值的写法:换行一定要缩进

    friends:

      lastName: zhangsan

      age: 20

    c)  springboot读取配置

    a)  使用@value标签读取

                                    i.     配置文件配置
    user:
       name: ls
       age: 18

                                   ii.     绑定配置对象
    @Component

    public class User {

        //@Value :从配置文件中取值   SPEL

        @Value("${user.name}")

        private String name = "zs";

        @Value("${user.age}")

        private Integer age = 18;

    b)  使用@ConfigrationProperties

     i.     配置文件配置
    user:
       name: ls
       age: 18

     ii.     绑定配置对象
    @Component
    @ConfigurationProperties(prefix = "person")

    public class User {

        //@Value :从配置文件中取值   SPEL

        @Value("${user.name}")

        private String name = "zs";

        @Value("${user.age}")

        private Integer age = 18;

    2.多环境配置切换

    a)  spring:
      profiles:
        active:
    prod #激活环境名称
    ---
    server:
      port:
    8082
    spring:
      profiles:
    dev #指定环境名称是属于哪一个环境
    ---
    server:
      port:
    8083
    spring:
      profiles:
    prod  #指定是属于哪一个环境,是否已经激活

    1. 自动配置的原理

    a)   

    3.Springboot整合测试

    a)  导入测试依赖包

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    类上打注解
    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = App.class) //这事一个Spring测试,要告诉它在哪儿加载Spring配置文件,其实告诉它应用类型就ok
    classes = 配置类的字节码对象

    4.Springboot的日志支持slf4j日志框架实现
    日志级别:trance<debug<info<warn<error,springboot是默认是开启info级别
    如果要修改springboot默认的日志级别,就在springboot的主配置文件里面去修改日志级别,注意:这里一定要加上你打印日志所在类的包名
    #修改springboot的默认的日志级别
    logging:
      level:
       
    cn://包名,需要输出的日志的包
          itsource:
    trace //日志级别
        #root: trace #根日志级别

    a)  slf4j日志框架实现了对其他日志框架封装
    获取日志打印器
    Logger logger = LoggerFactory.getLogger(Xxx.class); //
    所在类的字节码对象
    logger.error("这是error错误");

    对日志文件进行封装,每次运行就会打印出这个日志信息

    b) slf4j日志框架通过门面设计模式来设计,但是其他日志框架又不遵循slf4j的规范,所以就slf4j设计了一个适配器模式来适配其他日志框架.重新写了一个包来适配其他日志框架.
    logging:
      level:
        cn:
          itsource:
    trace
      file: mylog.txt #target平级生成一个日志文件叫mylog.txt文件
     
    pattern:
        file:
    %d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n # 指定文件中日志输出的格式

     

    b)  日志指定配置,当配置满足不了我们的需求时使用(logback-spring.xml),在springboot里面的日志框架是认识logback-spring.xml这个xml文件的.

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="true" scan="true" scanPeriod="1 seconds">
        <!-- 日志格式 -->
        <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n"/>
        <!--ConsoleAppender 用于在屏幕上输出日志-->
        <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
            <!--定义控制台输出格式-->
            <encoder>   <pattern>${CONSOLE_LOG_PATTERN}</pattern>
                <!-- 设置字符集 -->
                <charset>UTF-8</charset>
            </encoder>
        </appender>
        <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!--日志文件生成的路径-->
            <file>logs/springboot.log</file>
            <!--日志滚动条,日志文件装不下自动生成下一个日志文件-->
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <!--滚动条日志文件名称-->  <fileNamePattern>logs/springboot-%d{yyyyMMdd}-%i.log.gz</fileNamePattern>
                <maxFileSize>1KB</maxFileSize>
                <maxHistory>30</maxHistory>
                <!--滚动条日志文件总上限大小-->
    <totalSizeCap>5GB</totalSizeCap>
            </rollingPolicy>
            <!--定义控制台输出格式-->
            <encoder>  <pattern>${CONSOLE_LOG_PATTERN}</pattern>
                <!-- 设置字符集 -->
                <charset>UTF-8</charset>
            </encoder>
        </appender>
        <!--root是默认的logger 这里设定输出级别是debug-->
        <root level="info">
            <!--定义了两个appender,日志会通过往这两个appender里面写-->
            <!--会在控制台和日志文件进行一个输出-->
            <appender-ref ref="stdout"/>
            <appender-ref ref="file"/>
        </root>
        <!--如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况-->
        <!--additivity表示要不要使用rootLogger配置的appender进行输出-->
        <logger name="cn.itsource" level="trace" additivity="false">
            <appender-ref ref="stdout"/>
            <appender-ref ref="file"/>
        </logger>
    </configuration>

    5.模板引擎

    a)  一些模板引擎: JSP、Velocity、Freemarker、Thymeleaf

    b)  Springboot推荐使用Thymeleaf模板引擎

      i.     导入Thymeleaf包

    <!--thymeleaf模板引擎包-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

      ii.     定义一个类设置模板生成的位置

    @ConfigurationProperties(prefix = "spring.thymeleaf")
    public class ThymeleafProperties {
    //    定义编码格式
        private static final Charset DEFAULT_ENCODING = StandardCharsets.UTF_8;
    //    定义视图解析前缀
        private static final String DEFAULT_PREFIX = "classpath:/templates/";
    //    定义视图解析后缀
        private static final String DEFAULT_SUFFIX = ".html";
    }
    将HTML页面放入classpath:/templates/, thymeleaf会对页面进行自动渲染

    这里本人没有写完ThymeleafProperties,因为springboot自身封装了前缀和后缀,直接写一个模板,就会自动生成一个页面,跳转页面时直接跳转到页面文件名.

    iii.     配置视图解析器

    1. 直接在application.yml里面配置前缀和后缀
      thymeleaf:
        prefix:
      classpath:/templates/
        suffix: .html

      iv.     Controller层

    @Controller
    
    public class HelloController {
    @RequestMapping("/hello")
    public String hello(Model model){
             //想页面
            model.addAttribute("hello","yhptest");
                      //返回hello.HTML页面
            return "hello";
        }
    }

    iv页面展示返回的数据

    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h1>成功!</h1>
        <!--使用语法th:text 将div里面的文本内容设置为 -->
        <div th:text="${hello}">这是显示欢迎信息</div>
    </body>
    </html>

    8.Springboot拦截器配置

    1.自定义一个MyHanderAdapter 去实现(HanderInterceptor)
    赋写preHeader方法
    public class MyHandlerInterceptor implements HandlerInterceptor {

        long start = System.currentTimeMillis();

        @Override

        public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {

            start = System.currentTimeMillis();

            return true;

        }

        @Override

        public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

            System.out.println("Interceptor cost="+(System.currentTimeMillis()-start));

        }

        @Override

        public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

        }

    }

    这里我们需要实现HandlerInterceptor这个接口,这个接口包括三个方法,preHandle是请求执行前执行的,postHandler是请求结束执行的,但只有preHandle方法返回true的时候才会执行,afterCompletion是视图渲染完成后才执行,同样需要preHandle返回true,该方法通常用于清理资源等工作。除了实现上面的接口外,我们还需对主配置类其进行配置:

     1 @Configuration
     2 
     3 public class InterceptorConfig extends WebMvcConfigurerAdapter {
     4 
     5       注入我们自定义的拦截器
     6       @Autowired
     7 
     8      private MyHandlerInterceptor myHandlerInterceptor;
     9 
    10       @Override
    11 
    12       public void addInterceptors(InterceptorRegistry registry) {
    13 
    14           registry.addInterceptor(myHandlerInterceptor).addPathPatterns("/**");//拦截所有
    15 
    16           super.addInterceptors(registry);
    17 
    18       }
    19 
    20   }

       2.主配置类实现WebMvcConfigrater

     
    赋写addInterceptor方法添加拦截器
    
    //    添加拦截器
    
        @Override
    
        public void addInterceptors(InterceptorRegistry registry) {
    
    //        excludePathPatterns("/login"),放行/login路径,其他路径放行
    
            registry.addInterceptor(myHealderConfigraterAdaper).excludePathPatterns("/login");
    
        }

       3.添加视图控制器

       
    //    添加视图控制器
    
        @Override
    
        public void addViewControllers(ViewControllerRegistry registry) {
    
            registry.addViewController("/mm").setViewName("hello2");//设置页面名称
    
        }

    9.springboot持久化

       1.导入数据库驱动包和mybatis与springboot的整合包

    (1)      2.手动配置DataSource:自定义配置类配置DataSource,在yml配置四大金刚.
                      在application.properties添加配置文件;

    ########################################################
    
    ###datasource
    
    ########################################################
    
    spring.datasource.url = jdbc:mysql://localhost:3306/ssm
    
    spring.datasource.username = root
    
    spring.datasource.password = root
    
    spring.datasource.driverClassName = com.mysql.jdbc.Driver
    
    spring.datasource.max-active=20
    
    spring.datasource.max-idle=8
    
    spring.datasource.min-idle=8
    
    spring.datasource.initial-size=10

    //配置别名

    mybatis.type-aliases-package=包名,包名….

          测试的时候一定要在配置类上配置@MapperScan("cn.itsource.springboot.mapper")扫描Mapper层

       3.springboot自动配置DataSource

        https://blog.csdn.net/tt50335971/article/details/85254730

    4.springboot集成mybatis
    <!-- mysql 数据库驱动. -->
    
         <dependency>
    
             <groupId>mysql</groupId>
    
             <artifactId>mysql-connector-java</artifactId>
    
         </dependency>
    
         <!--
    
    spring-boot mybatis依赖:
    
    
    
    请不要使用1.0.0版本,因为还不支持拦截器插件,
    
       1.1.1 是博主写帖子时候的版本,大家使用最新版本即可
    
       -->
    
         <dependency>
    
             <groupId>org.mybatis.spring.boot</groupId>
    
             <artifactId>mybatis-spring-boot-starter</artifactId>
    
             <version>1.1.1</version>
    
         </dependency>

     5事务实现

    1.注解方式实现事务:配置类上@EnableTranscationManagment,在service层打上@Transcational标签

    2.xml配置实现事务  

              c)导入aop的集成包

              a)写一个xml配置文件

              b)主配置类上使用注解导入xml配置文件

    <!-- 配置事物管理器 -->
    
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    
          <property name="dataSource" ref="dataSource" />
    
        </bean>
    
        <!-- aop应用事务管理 -->
    
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
    
            <tx:attributes>
                //只读事务
    
                <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
    
                <tx:method name="get*" read-only="true"/>
    
                <tx:method name="select*" read-only="true"/>
    
                <tx:method name="search*" read-only="true"/>
    
                <tx:method name="query*" read-only="true"/>
    
                //支持所有事物
    
                <tx:method name="*" propagation="REQUIRED"/>
    
            </tx:attributes>
    
        </tx:advice>
    
        <aop:config>
    
            <aop:pointcut expression="execution(* cn.itsource.eloan.core.service..*.*(..))" id="coreServicePointcut"/>
    
            <aop:advisor advice-ref="txAdvice" pointcut-ref="coreServicePointcut"/>
    
        </aop:config>

    注意:一定要在主配置类上加@ImportResource("classpath:xml文件名 ")标签

    10,pageHeler分页使用: PageHelper是mybatis一个插件,可以用它完成分页

       1.导入他的依赖

             

    <dependency>
    
          <groupId>com.github.pagehelper</groupId>
    
          <artifactId>pagehelper</artifactId>
    
           <version>4.1.0</version>
    
    </dependency>     

       2.不用写count和每页条数的SQL语句和limit语句,返回的page对象相当于是之前的PageList对象,封装了我们之前写的count(数据总数)和ArrayList(每页的数据)

       3.service层调用PageHelper去查询总条数和每页显示的数据数,查询的数据封装成Page对象, 返回这个Page对象.

     

    public class testPageHelper {
        
        @Test
        public void testPageHelper() {
            //创建一个 spring 容器
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext*.xml");
            
            //从 spring 容器中获取 TbItemMapper 代理对象
            TbItemMapper tbItemMapper = applicationContext.getBean(TbItemMapper.class);
            
            //执行查询
            TbItemExample example = new TbItemExample();
            
            //分页处理
            PageHelper.startPage(1, 10);  //第一页  取10条
            List<TbItem> list = tbItemMapper.selectByExample(example);
            for (TbItem tbItem : list) {
                System.out.println(tbItem.getId() + " "+ tbItem.getTitle());
            }
            
            //取分页信息
            PageInfo<TbItem> pageInfo = new PageInfo<>(list);
            System.out.println(pageInfo.getTotal());
        }
    }

    11.搭建一个完整springboot应用

  • 相关阅读:
    动态横向(水平)合并Repeater数据行DataItem的列
    动态绑数据(Repeater控件HeaderTemplate和ItemTemplate)
    动态横向(水平)合并GridView数据行DataRow的列
    动态绑数据(GridView控件Header和ItemTemplate)
    用具体列名替代星号
    如何实现数据行转换列显示
    用LINQ获取XML节点数据
    从字符串中获取XML节点数据
    字符串创建XML文档
    根据Attribute值条件对XML文档进行修改
  • 原文地址:https://www.cnblogs.com/8888-lhb/p/11538501.html
Copyright © 2011-2022 走看看