zoukankan      html  css  js  c++  java
  • spring boot + mybatis + druid配置实践

    最近开始搭建spring boot工程,将自身实践分享出来,本文将讲述spring boot + mybatis + druid的配置方案。

    pom.xml需要引入mybatis 启动依赖:

    <dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
    </dependency>

    由于我是使用mysql还需要引入mysql启动依赖,

    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
    </dependency>
    

      

    加入druid依赖,

    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.18</version>
    </dependency>
    

      

    对于使用mysql + mybatis + durid  pom.xml 中组件就添加好了!

    配置DruidConfig:

    @Configuration
    public class DruidConfig {

    private Logger logger = LoggerFactory.getLogger(getClass());

    @Value("${spring.datasource.url}")
    private String dbUrl;

    @Value("${spring.datasource.username}")
    private String username;

    @Value("${spring.datasource.password}")
    private String password;

    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;

    @Value("${spring.datasource.initialSize}")
    private int initialSize;

    @Value("${spring.datasource.minIdle}")
    private int minIdle;

    @Value("${spring.datasource.maxActive}")
    private int maxActive;

    @Value("${spring.datasource.maxWait}")
    private int maxWait;

    @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
    private int timeBetweenEvictionRunsMillis;

    @Value("${spring.datasource.minEvictableIdleTimeMillis}")
    private int minEvictableIdleTimeMillis;

    @Value("${spring.datasource.validationQuery}")
    private String validationQuery;

    @Value("${spring.datasource.testWhileIdle}")
    private boolean testWhileIdle;

    @Value("${spring.datasource.testOnBorrow}")
    private boolean testOnBorrow;

    @Value("${spring.datasource.testOnReturn}")
    private boolean testOnReturn;

    @Value("${spring.datasource.poolPreparedStatements}")
    private boolean poolPreparedStatements;

    @Value("${spring.datasource.filters}")
    private String filters;

    @Bean
    public ServletRegistrationBean druidServlet() {
    ServletRegistrationBean reg = new ServletRegistrationBean();
    reg.setServlet(new StatViewServlet());
    reg.addUrlMappings("/druid/*");
    reg.addInitParameter("loginUsername", "druid");
    reg.addInitParameter("loginPassword", "jiajian123456");
    return reg;
    }

    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
    filterRegistrationBean.setFilter(new WebStatFilter());
    filterRegistrationBean.addUrlPatterns("/*");
    filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
    filterRegistrationBean.addInitParameter("profileEnable", "true");
    filterRegistrationBean.addInitParameter("principalCookieName", "USER_COOKIE");
    filterRegistrationBean.addInitParameter("principalSessionName", "USER_SESSION");
    return filterRegistrationBean;
    }

    @Bean
    @Primary
    public DataSource druidDataSource(){
    DruidDataSource datasource = new DruidDataSource();

    datasource.setUrl(this.dbUrl);
    datasource.setUsername(username);
    datasource.setPassword(password);
    datasource.setDriverClassName(driverClassName);
    datasource.setInitialSize(initialSize);
    datasource.setMinIdle(minIdle);
    datasource.setMaxActive(maxActive);
    datasource.setMaxWait(maxWait);
    datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
    datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
    datasource.setValidationQuery(validationQuery);
    datasource.setTestWhileIdle(testWhileIdle);
    datasource.setTestOnBorrow(testOnBorrow);
    datasource.setTestOnReturn(testOnReturn);
    datasource.setPoolPreparedStatements(poolPreparedStatements);
    try {
    datasource.setFilters(filters);
    } catch (SQLException e) {
    logger.error("druid configuration initialization filter", e);
    }
    return datasource;
    }

    }

    如果不想使用默认数据库连接池,需要自定义连接池,并在下文中注入,@Primary的作用是不指定注入DataSource时,默认使用该DataSource Bean

    配置mapper扫描和事务管理:

    import javax.sql.DataSource;
    
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.transaction.PlatformTransactionManager;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    import org.springframework.transaction.annotation.TransactionManagementConfigurer;
    
    @Configuration
    @EnableTransactionManagement
    @MapperScan("com.xxx.xxx.mybatis.mapper")
    public class SessionFactoryConfig implements TransactionManagementConfigurer{
    /** * mybatis 配置路径 */ 
    private static String MYBATIS_CONFIG = "mybatis-config.xml";
    
    @Autowired 
    private DataSource dataSource;
    
    private String typeAliasPackage = "com.xxx.xxx.mybati.model";
    
    /** 
    *创建sqlSessionFactoryBean 实例 
    * 并且设置configtion 如驼峰命名.等等 
    * 设置mapper 映射路径 
    * 设置datasource数据源 
    * @return 
    * @throws Exception 
    */
    @Bean(name = "sqlSessionFactory") 
    public SqlSessionFactoryBean createSqlSessionFactoryBean() throws Exception {
    SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); 
    /** 设置mybatis configuration 扫描路径 */
    sqlSessionFactoryBean.setConfigLocation(new ClassPathResource(MYBATIS_CONFIG));
    /** 设置datasource */ 
    sqlSessionFactoryBean.setDataSource(dataSource); 
    /** 设置typeAlias 包扫描路径 */
    sqlSessionFactoryBean.setTypeAliasesPackage(typeAliasPackage); 
    return sqlSessionFactoryBean; 
    }
    
    @Bean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
    return new SqlSessionTemplate(sqlSessionFactory);
    }
    
    @Bean
    @Override
    public PlatformTransactionManager annotationDrivenTransactionManager() {
    return new DataSourceTransactionManager(dataSource);
    }
    }

    在application.properties写好连接池配置,SessionFactoryConfig.class 中dataSource可以直接注入。

    application.properties文件为:

    spring.datasource.name = test
    spring.datasource.url = jdbc:mysql://localhost:3306/test
    spring.datasource.username = test
    spring.datasource.password = 123456
    spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
    spring.datasource.driver-class-name = com.mysql.jdbc.Driver
    spring.datasource.filters = stat
    spring.datasource.maxActive = 20
    spring.datasource.initialSize = 1
    spring.datasource.maxWait = 60000
    spring.datasource.minIdle = 1
    spring.datasource.timeBetweenEvictionRunsMillis = 60000
    spring.datasource.minEvictableIdleTimeMillis = 300000
    spring.datasource.validationQuery = select 'x'
    spring.datasource.testWhileIdle = true
    spring.datasource.testOnBorrow = false
    spring.datasource.testOnReturn = false
    spring.datasource.poolPreparedStatements = true
    spring.datasource.maxOpenPreparedStatements = 20

    我的mapper.java文件与.xml全部放在com.xxx.xxx.mybatis.mapper包下。

  • 相关阅读:
    android 75 新闻列表页面
    android 74 下载文本
    android 73 下载图片
    android 72 确定取消对话框,单选对话框,多选对话框
    android 71 ArrayAdapter和SimpleAdapter
    android 70 使用ListView把数据显示至屏幕
    maven如何将本地jar安装到本地仓库
    Centos6.7搭建ISCSI存储服务器
    解决maven打包编译出现File encoding has not been set问题
    MySQL 解决 emoji表情 的方法,使用utf8mb4 字符集(4字节 UTF-8 Unicode 编码)
  • 原文地址:https://www.cnblogs.com/vincent0928/p/6099600.html
Copyright © 2011-2022 走看看