Springboot druidマルチデータソース(jpa)
19371 ワード
依存関係:
com.alibaba
druid
1.1.19
DruidConfig:
package com.icil.tracking.milestone.service.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
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.PropertySource;
import org.springframework.stereotype.Component;
import java.sql.SQLException;
import java.util.Properties;
@PropertySource(value = "classpath:application.properties",ignoreResourceNotFound = true)
@Component
public class DruidConfig {
private Logger log = LoggerFactory.getLogger(DruidConfig.class);
@Value("${spring.druid.initialSize}")
private Integer initialSize;
@Value("${spring.druid.minIdle}")
private Integer minIdle;
@Value("${spring.druid.maxActive}")
private Integer maxActive;
@Value("${spring.druid.maxPoolPreparedStatementPerConnectionSize}")
private Integer maxPoolPreparedStatementPerConnectionSize;
@Value("${spring.druid.maxWait}")
private Long maxWait;
@Value("${spring.druid.timeBetweenEvictionRunsMillis}")
private Long timeBetweenEvictionRunsMillis;
@Value("${spring.druid.minEvictableIdleTimeMillis}")
private Long minEvictableIdleTimeMillis;
@Value("${spring.druid.filters}")
private String filters;
@Value("${spring.druid.connectionProperties}")
private Properties connectionProperties;
@Value("${spring.druid.testWhileIdle}")
private boolean testWhileIdle;
@Value("${spring.druid.testOnBorrow}")
private boolean testOnBorrow;
@Value("${spring.druid.testOnReturn}")
private boolean testOnReturn;
@Value("${spring.druid.poolPreparedStatements}")
private boolean poolPreparedStatements;
public DruidDataSource druidDataSource(){
log.info("============= loading druid config ====================");
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setInitialSize(initialSize);
druidDataSource.setMinIdle(minIdle);
druidDataSource.setMaxActive(maxActive);
druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
druidDataSource.setMaxWait(maxWait);
druidDataSource.setTimeBetweenConnectErrorMillis(timeBetweenEvictionRunsMillis);
druidDataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
druidDataSource.setConnectProperties(connectionProperties);
druidDataSource.setTestWhileIdle(testWhileIdle);
druidDataSource.setTestOnBorrow(testOnBorrow);
druidDataSource.setTestOnReturn(testOnReturn);
druidDataSource.setPoolPreparedStatements(poolPreparedStatements);
try {
druidDataSource.setFilters(filters);
} catch (SQLException e) {
e.printStackTrace();
}
return druidDataSource;
}
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean registrationBean =
new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
// registrationBean.addInitParameter("allow","127.0.0.1"); //
// registrationBean.addInitParameter("deny","127.0.0.1"); // ,
//
registrationBean.addInitParameter("loginUsername","root");
registrationBean.addInitParameter("loginPassword","root");
//
registrationBean.addInitParameter("resetEnable","false");
return registrationBean;
}
@Bean
public FilterRegistrationBean statFilter(){
//
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
//
filterRegistrationBean.addUrlPatterns("/*");
//
filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
}
DBGlobalConfig (Global )
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "globalEntityManagerFactory",
transactionManagerRef = "globalTransactionManager",
basePackages = {"com.sea.milestone.service.repo.dao.global"})
public class DBGlobalConfig {
@Bean("globalDataSourceProperties")
@ConfigurationProperties("datasource.global")
public DataSourceProperties dataSourceProperties() {
return new DataSourceProperties();
}
// @Bean("globalDataSource")
// public DataSource dataSource(@Qualifier("globalDataSourceProperties") DataSourceProperties dataSourceProperties) {
// return dataSourceProperties.initializeDataSourceBuilder().build();
// }
@Autowired
private DruidConfig druidConfig;
@Bean("globalDataSource")
@ConfigurationProperties("datasource.global")
public DataSource dataSource(){
return druidConfig.druidDataSource();
}
@Bean("globalEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder, @Qualifier("globalDataSource") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("com.sea.milestone.service.repo.po.global")
.persistenceUnit("global")
.build();
}
@Bean(name = "globalTransactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("globalEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
JpaTransactionManager manager = new JpaTransactionManager(entityManagerFactory);
manager.setGlobalRollbackOnParticipationFailure(false);
return manager;
}
}
application.properties
datasource.global.url = jdbc:mysql://icilaws-rds-afsa2-t03.cav2qntehphf.ap-southeast-1.rds.amazonaws.com/Global?autoReconnect=true&useSSL=false datasource.global.username = root datasource.global.password = ACahlofh datasource.global.driver-class-name = com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.properties.hibernate.generate_statistics = true
spring.jpa.show-sql = true
spring.jpa.properties.hibernate.format_sql = true ##common druid spring.druid.initialSize = 5 spring.druid.minIdle = 5 spring.druid.maxActive = 20 spring.druid.maxWait = 60000 spring.druid.timeBetweenEvictionRunsMillis = 60000 spring.druid.minEvictableIdleTimeMillis = 300000 #spring.druid.validationQuery=SELECT 1 FROM DUAL # spring.druid.testWhileIdle = true spring.druid.testOnBorrow = false spring.druid.testOnReturn = false spring.druid.poolPreparedStatements = false spring.druid.maxPoolPreparedStatementPerConnectionSize = 20 spring.druid.filters = stat,wall,log4j spring.druid.connectionProperties = 'druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000'