spring boot 基礎篇 -- 阿裏多數據源
阿新 • • 發佈:2017-09-05
builder use state let 啟動項 sar you span mode
這塊是比較基礎的配置,阿裏數據庫配置還是比較好用的,並且可以用來監控數據源的情況。廢話不多說,下面看代碼。
基於maven項目,在pom.xml中添加引用:
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.11</version> </dependency>
配置文件如下:
server.port=9090 logging.level.tk.mybatis=TRACE druid1.type=com.alibaba.druid.pool.DruidDataSource druid1.url=jdbc:mysql://192.168.0.190:3306/bestPractices druid1.driver-class=com.mysql.jdbc.Driver druid1.username=root druid1.password=youeDATA2016_ druid1.initial-size=1 druid1.min-idle=1 druid1.max-active=20 druid1.test-on-borrow=true druid1.filters=stat,wall,log4j druid1.poolPreparedStatements=true druid1.datasource.maxPoolPreparedStatementPerConnectionSize=20 druid1.datasource.logAbandoned=true druid2.type=com.alibaba.druid.pool.DruidDataSource druid2.url=jdbc:mysql://192.168.0.190:3306/bestPracticesTwo druid2.driver-class=com.mysql.jdbc.Driver druid2.username=root druid2.password=youeDATA2016_ druid2.initial-size=1 druid2.min-idle=1 druid2.max-active=20 druid2.test-on-borrow=true druid2.filters=stat,wall,log4j druid2.poolPreparedStatements=true druid2.datasource.maxPoolPreparedStatementPerConnectionSize=20 druid2.datasource.logAbandoned=true spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp mybatis.type-aliases-package=bp.model mybatis.mapper-locations=classpath:mybatis/mybatis-config.xml mapper.mappers=bp.util.MyMapper #mapper.not-empty=false #mapper.identity=MYSQL pagehelper.helperDialect=mysql pagehelper.reasonable=true pagehelper.supportMethodsArguments=true pagehelper.dialect=com.github.pagehelper.dialect.helper.MySqlDialect pagehelper.params=count=countSql pagehelper.autoDialect=true pagehelper.closeConn=false pagehelper.offsetAsPageNum=true spring.http.encoding.force=true spring.redis.database= 0 spring.redis.host= 192.168.237.128 spring.redis.port= 6379 spring.redis.pool.max-active= 8 spring.redis.pool.max-idle= 8 spring.redis.pool.max-wait=-1 spring.redis.pool.min-idle=0 spring.redis.timeout= 1500
配置文件:數據源1
package bp.config; import java.sql.SQLException; 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.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import com.alibaba.druid.pool.DruidDataSource; /** * 數據源1 */ @Configuration @EnableConfigurationProperties(DruidProperties1.class) @AutoConfigureBefore(DataSourceAutoConfiguration.class) @ConditionalOnClass(DruidDataSource.class) @MapperScan(basePackages = "bp.mapper.mapper1", sqlSessionTemplateRef = "SqlSessionTemplate1") public class DataSource1Config { @Autowired private DruidProperties1 properties; @Bean(name = "DataSource1") @ConditionalOnProperty(prefix = "druid1", name = "url") @Primary public DataSource dataSource() throws SQLException { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(properties.getUrl()); dataSource.setUsername(properties.getUsername()); dataSource.setPassword(properties.getPassword()); dataSource.setFilters(properties.getFilters()); if (properties.getInitialSize() > 0) { dataSource.setInitialSize(properties.getInitialSize()); } if (properties.getMinIdle() > 0) { dataSource.setMinIdle(properties.getMinIdle()); } if (properties.getMaxActive() > 0) { dataSource.setMaxActive(properties.getMaxActive()); } dataSource.setTestOnBorrow(properties.isTestOnBorrow()); try { dataSource.init(); } catch (SQLException e) { throw new RuntimeException(e); } return dataSource; } @Bean(name = "SqlSessionFactory1") @Primary public SqlSessionFactory test1SqlSessionFactory(@Qualifier("DataSource1") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); bean.setDataSource(dataSource); bean.setConfigLocation(resolver.getResource("classpath:mybatis/mybatis-config.xml")); bean.setMapperLocations(resolver.getResources("bp/mapper/mapper1/*.xml")); return bean.getObject(); } @Bean(name = "TransactionManager1") @Primary public DataSourceTransactionManager test1TransactionManager(@Qualifier("DataSource1") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "SqlSessionTemplate1") @Primary public SqlSessionTemplate test1SqlSessionTemplate(@Qualifier("SqlSessionFactory1") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
數據源2:
package bp.config; import java.sql.SQLException; 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.aop.framework.autoproxy.BeanNameAutoProxyCreator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; import com.alibaba.druid.support.spring.stat.DruidStatInterceptor; import javax.annotation.Resource; import javax.sql.DataSource; /** * 數據源2 */ @Configuration @EnableConfigurationProperties(DruidProperties2.class) @AutoConfigureBefore(DataSourceAutoConfiguration.class) @ConditionalOnClass(DruidDataSource.class) @MapperScan(basePackages = "bp.mapper.mapper2", sqlSessionTemplateRef = "SqlSessionTemplate2") public class DataSource2Config { @Autowired private DruidProperties2 properties; @Bean(name = "DataSource2") @ConditionalOnProperty(prefix = "druid2", name = "url") public DataSource dataSource() throws SQLException { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(properties.getUrl()); dataSource.setUsername(properties.getUsername()); dataSource.setPassword(properties.getPassword()); dataSource.setFilters(properties.getFilters()); if (properties.getInitialSize() > 0) { dataSource.setInitialSize(properties.getInitialSize()); } if (properties.getMinIdle() > 0) { dataSource.setMinIdle(properties.getMinIdle()); } if (properties.getMaxActive() > 0) { dataSource.setMaxActive(properties.getMaxActive()); } dataSource.setTestOnBorrow(properties.isTestOnBorrow()); try { dataSource.init(); } catch (SQLException e) { throw new RuntimeException(e); } return dataSource; } @Bean(name = "SqlSessionFactory2") public SqlSessionFactory test2SqlSessionFactory(@Qualifier("DataSource2") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); bean.setDataSource(dataSource); bean.setConfigLocation(resolver.getResource("classpath:mybatis/mybatis-config.xml")); bean.setMapperLocations(resolver.getResources("bp/mapper/mapper2/*.xml")); return bean.getObject(); } @Bean(name = "TransactionManager2") public DataSourceTransactionManager test2TransactionManager(@Qualifier("DataSource2") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "SqlSessionTemplate2") public SqlSessionTemplate test2SqlSessionTemplate(@Qualifier("SqlSessionFactory2") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
啟動項目就發現是雙數據源了
spring boot 基礎篇 -- 阿裏多數據源