zoukankan      html  css  js  c++  java
  • Spring Boot框架

    一、MyBatis发展史 

      MyBatis原是apache的一个开源项目iBatis, 2010年6月这个项目由apache software foundation 迁移到了google code,随着开发团队转投Google Code旗下,ibatis3.x正式更名为Mybatis ,代码于2013年11月迁移到Github。
      iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。

    二、SpringBoot集成MyBatis

    1、添加依赖

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.0.0</version>
    </dependency>
    
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.1.0</version>
    </dependency>
    
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.2.3</version>
    </dependency>

    2、配置文件

    spring:
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource            # 配置当前要使用的数据源的操作类型
        driver-class-name: oracle.jdbc.driver.OracleDriver      # 配置ORACLE的驱动程序类
        url: jdbc:oracle:thin:@localhost:1521:ORCL              # 数据库连接地址
        username: "plat_user"                                   # 数据库用户名
        password: 123
        druid:                                                  # 进行数据库连接池的配置
          min-idle: 5                                           # 数据库连接池的最小维持连接数    
          initial-size: 5                                       # 初始化提供的连接数
          max-total: 5                                          # 最大的连接数
          max-wait-millis: 200                                  # 等待连接获取的最大超时时间
    mybatis:
      type-aliases-package: com.example.demo.dao.mapper                # 定义所有操作类的别名所在包
      mapper-locations: classpath:com/example/demo/dao/config/**/*.xml # 所有的mapper映射文件
      logImpl: org.apache.ibatis.logging.log4j2.Log4j2Impl                    # mybatis日志
    pagehelper:
        reasonable: false
        supportMethodsArguments: true
        params: pageNum=start;pageSize=limit;

    3、注解

    @SpringBootApplication
    @EnableDiscoveryClient
    @MapperScan("com.example.demo.dao.mapper")
    public class Application
    {
        public static void main(String[] args )
        {
            SpringApplication.run(Application.class, args);
        }
    }

    三、MyBatis深入

    1、分页插件PageHelper

      pagehelper使用时要注意版本号,重要的事情说三遍,一定要注意,一定要注意,如果版本号不对应,那么分页插件不会生效。

    a) 添加依赖

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.1.0</version>
    </dependency>
    
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.2.3</version>
    </dependency>

    b) 实现

      pagehelper使用有两种方式,配置文件方式和代码声明方式。

      配置文件方式(yaml):

    pagehelper:
        reasonable: false
        supportMethodsArguments: true
        params: pageNum=start;pageSize=limit;

      代码声明方式

    @Bean
    public PageHelper pageHelper() {
        PageHelper pageHelper = new PageHelper();
        Properties p = new Properties();
        p.setProperty("offsetAsPageNum", "true");
        p.setProperty("rowBoundsWithCount", "true");
        p.setProperty("reasonable", "true");
        pageHelper.setProperties(p);
        return pageHelper;
    }

    2、多数据源支持

    a) 添加依赖

      添加依赖和单个数据与无区别,同“二、SpringBoot集成MyBatis ->1、添加依赖”。

    b) 配置文件

    spring:
      datasource:
        example1:
          password: root
          url: jdbc:mysql://127.0.0.1:3306/master?useUnicode=true&characterEncoding=UTF-8
          driver-class-name: com.mysql.jdbc.Driver
          username: root
          type: com.zaxxer.hikari.HikariDataSource
        example2:
          password: root
          url: jdbc:mysql://127.0.0.1:3306/slave1?useUnicode=true&characterEncoding=UTF-8
          idle-timeout: 20000
          driver-class-name: com.mysql.jdbc.Driver
          username: root
          type: com.zaxxer.hikari.HikariDataSource

    c)  代码实现

    @Bean("dataSource")// 将这个对象放入Spring容器中
    @Primary           // 表示这个数据源是默认数据源
    @ConfigurationProperties(prefix = "spring.datasource.example1")// 读取application.properties中的配置参数映射成为一个对象 prefix表示参数的前缀
    public DataSource getDataSource() {
        return DataSourceBuilder.create().build();
    }
    
    @Bean(name = "sqlSessionFactory")// 表示这个数据源是默认数据源
    @Primary                         // @Qualifier表示查找Spring容器中名字为test1DataSource的对象
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource datasource)
            throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/example1/*.xml"));// 设置mybatis的xml所在位置
        return bean.getObject();
    }
    
    @Bean("dataSourceExample2")// 将这个对象放入Spring容器中
    @ConfigurationProperties(prefix = "spring.datasource.example2")// 读取application.properties中的配置参数映射成为一个对象 prefix表示参数的前缀
    public DataSource getDataSource() {
        return DataSourceBuilder.create().build();
    }
    
    @Bean(name = "sqlSessionFactoryExample2")// 表示这个数据源是默认数据源
    // @Qualifier表示查找Spring容器中名字为test1DataSource的对象
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSourceExample2") DataSource datasource)
            throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/examplew/*.xml"));// 设置mybatis的xml所在位置
        return bean.getObject();
    }

    3、去本地化配置(spring cloud config)

    a) 项目配置文件

    #日志文件名
    logging:
      file: ${spring.application.name}
    #配置中心地址
    logging:
      config: http://172.17.30.111:9001/plat-config/test/develop/log4j2.yml?resolvePlaceholders=false&type=.yml

    b) 日志配置文件

    Configuration:
      status: error
      name: YAMLConfig
      properties:
        property:
         - name: log_file
           value: "${sys:LOG_FILE}"
         - name: log_pattern
           value: "%d{yyyy-MM-ddHH:mm:ss,SSS z} %t [${log_file},%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-B3-ParentSpanId}] %-5level %class{36} %L %M - %msg%xEx%n"
         - name: base_path
           value: "/java/apache-tomcat-8.0.36/webapps"
         - name: file_name
           value: "${base_path}/log/${log_file}.log"
         - name: rolling_file_name
           value: "${base_path}/backup/${log_file}-%d{yyyy-MM-dd}-%i.log.gz"
         - name: every_file_size
           value: 10M
      Appenders:
        Console:
          name: Console
          target: SYSTEM_OUT
          PatternLayout:
            Pattern: ${log_pattern}
          ThresholdFilter:
            level: trace
            onMatch: ACCEPT
            onMismatch: DENY
        RollingFile:
          name: RollingFile
          fileName: ${filename}
          filePattern: ${rolling_file_name}
          PatternLayout:
            Pattern: ${log_pattern}
          Policies:
            SizeBasedTriggeringPolicy:
              size: ${every_file_size}
        Kafka: #输出到Kafka
          name: Kafka
          topic:  app_log
          #Kafka appender ignoreExceptions 必须设置为false,否则无法触发Failover
          ignoreExceptions: false
          PatternLayout:
            Pattern: ${log_pattern}
          Property:
            - name: bootstrap.servers
              value: 172.17.30.143:9092
            # KafkaClient包里默认值是60000ms,当Kafka宕机时,尝试写Kafka需要1分钟才能返回Exception,之后才会触发Failover,当请求量大时,log4j2 队列很快就会打满,之后写日志就Blocking,严重影响到主服务响应。所以要设置足够短,队列长度足够长
            - name: max.block.ms
              value: 20000
        Failover: #此处的Failover Appender就是解耦对Kafka的依赖,当Kafka Crash时,日志触发Failover,写本地即可
          name: Failover
          primary: Kafka
          #retryIntervalSeconds 是通过异常来切换的,所以可以适量加大间隔,比如上面的10分钟
          retryIntervalSeconds: 600  
          Failovers:
            AppenderRef: 
              - ref: Console
      Loggers:
        logger:
         - name: org.apache.http
           level: INFO
           additivity: false
           AppenderRef:
            - ref: Console
            - ref: RollingFile
            - ref: Failover
         - name: com.netflix.discovery
           level: ERROR
           additivity: false
           AppenderRef:
            - ref: Console
            - ref: RollingFile
            - ref: Failover
        Root:
          level: DEBUG
          AppenderRef:
           - ref: Console
           - ref: RollingFile
           - ref: Failover

    c) 添加依赖

    <dependency> <!-- 引入log4j2依赖 -->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
    
    <dependency>  <!-- 加上这个才能辨认到log4j2.yml文件 -->
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-yaml</artifactId>
    </dependency>

    注意:pom文件要添加yaml文件支持的依赖

    附录: 《MyBatis中文官网地址》

  • 相关阅读:
    石家庄的联通破网络,请大家鉴定
    快速动态访问属性
    TcpRouter端口转发工具
    谈谈我的开发秘密武器
    搞清如何使用oAuth 1.0 & 1.0a
    回顾我学过的编程语言
    jQuery moible 开发笔记之项目设计
    从Minecraft(我的世界)看游戏设计外行人的游戏杂谈
    某android平板项目开发笔记aChartEngine图表显示(2)
    R语言绘图学习笔记之Scatter plots
  • 原文地址:https://www.cnblogs.com/pinenut/p/11884419.html
Copyright © 2011-2022 走看看