springboot配置文件配置如下:
# 數據源一
spring.datasource.ky_data.name=ky_data-db
spring.datasource.ky_data.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.ky_data.url= jdbc:mysql://127.0.0.1:3306/ky_data?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&usessl=false
spring.datasource.ky_data.username= root
spring.datasource.ky_data.password= 123456
spring.datasource.ky_data.type= com.alibaba.druid.pool.DruidDataSource
# 配置監控統計攔截的filters,去掉後監控界面sql無法統計,'wall'用於防火牆
spring.datasource.ky_data.filters=stat,wall,log4j
spring.datasource.ky_data.validationQuery=SELECT 1 FROM DUAL
spring.datasource.ky_data.logSlowSql=true
# 數據源二
spring.datasource.ky_user.name=user-db
spring.datasource.ky_user.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.ky_user.url= jdbc:mysql://127.0.0.1:3306/ky_user_notice?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&usessl=false
spring.datasource.ky_user.username= root
spring.datasource.ky_user.password= 123456
spring.datasource.ky_user.type= com.alibaba.druid.pool.DruidDataSource
# 配置監控統計攔截的filters,去掉後監控界面sql無法統計,'wall'用於防火牆
spring.datasource.ky_user.filters=stat,wall,log4j
spring.datasource.ky_user.validationQuery=SELECT 1 FROM DUAL
spring.datasource.ky_user.logSlowSql=true
# 數據源三
spring.datasource.ky_order.name=order-db
spring.datasource.ky_order.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.ky_order.url= jdbc:mysql://127.0.0.1:3306/ky_order?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&usessl=false
spring.datasource.ky_order.username= root
spring.datasource.ky_order.password= 123456
spring.datasource.ky_order.type= com.alibaba.druid.pool.DruidDataSource
# 配置監控統計攔截的filters,去掉後監控界面sql無法統計,'wall'用於防火牆
spring.datasource.ky_order.filters=stat,wall,log4j
spring.datasource.ky_order.validationQuery=SELECT 1 FROM DUAL
spring.datasource.ky_order.logSlowSql=true
# druid監控 登錄信息
druid.monitor.loginUsername=admin
druid.monitor.loginPassword=admin
編寫KyDataDBConfig類,如下
@Data
@Configuration("kyDataDBConfig")
@ConfigurationProperties(prefix = "spring.datasource.ky_data")
public class KyDataDBConfig {
private String name;
private String url;
private String username;
private String password;
private String driverClassName;
//private int initialSize;
//private int minIdle;
//private int maxActive;
//private int maxWait;
//private int timeBetweenEvictionRunsMillis;
//private int minEvictableIdleTimeMillis;
private String validationQuery;
//private boolean testWhileIdle;
//private boolean testOnBorrow;
//private boolean testOnReturn;
//private boolean poolPreparedStatements;
//private int maxPoolPreparedStatementPerConnectionSize;
private String filters;
private String logSlowSql;
//private String connectionProperties;
//private boolean useGlobalDataSourceStat;
}
編寫KyOrderDBConfig類,如下
@Data
@Configuration("kyOrderDBConfig")
@ConfigurationProperties(prefix = "spring.datasource.ky_order")
public class KyOrderDBConfig {
private String name;
private String url;
private String username;
private String password;
private String driverClassName;
//private int initialSize;
//private int minIdle;
//private int maxActive;
//private int maxWait;
//private int timeBetweenEvictionRunsMillis;
//private int minEvictableIdleTimeMillis;
private String validationQuery;
//private boolean testWhileIdle;
//private boolean testOnBorrow;
//private boolean testOnReturn;
//private boolean poolPreparedStatements;
//private int maxPoolPreparedStatementPerConnectionSize;
private String filters;
private String logSlowSql;
//private String connectionProperties;
//private boolean useGlobalDataSourceStat;
}
編寫KyUserDBConfig類,如下:
@Data
@Configuration("kyUserDBConfig")
@ConfigurationProperties(prefix = "spring.datasource.ky_user")
public class KyUserDBConfig {
private String name;
private String url;
private String username;
private String password;
private String driverClassName;
//private int initialSize;
//private int minIdle;
//private int maxActive;
//private int maxWait;
//private int timeBetweenEvictionRunsMillis;
//private int minEvictableIdleTimeMillis;
private String validationQuery;
//private boolean testWhileIdle;
//private boolean testOnBorrow;
//private boolean testOnReturn;
//private boolean poolPreparedStatements;
//private int maxPoolPreparedStatementPerConnectionSize;
private String filters;
private String logSlowSql;
//private String connectionProperties;
//private boolean useGlobalDataSourceStat;
}
編寫ManyDataSourceConfig類,如下:
@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
public class ManyDataSourceConfig {
private static final Logger logger = LoggerFactory.getLogger(ManyDataSourceConfig.class);
public static final String DATA_SOURCE_KY_DATA = "kyDataDataSource";
public static final String DATA_SOURCE_KY_USER = "kyUserDataSource";
public static final String DATA_SOURCE_KY_ORDER = "kyOrderDataSource";
@Bean(name = DATA_SOURCE_KY_DATA)
@Qualifier(DATA_SOURCE_KY_DATA)
@Primary
@ConfigurationProperties(prefix = "spring.datasource.ky_data")
public DataSource kyDataDataSource(@Qualifier("kyDataDBConfig") KyDataDBConfig db) {
//return DataSourceBuilder.create().build();
// 屏蔽採用自動注入方式, 採用druidDataSource方式加載數據庫數據源 by zhangjf 20190509 add
final DruidDataSource datasource = new DruidDataSource();
datasource.setName(db.getName());
datasource.setUrl(db.getUrl());
datasource.setUsername(db.getUsername());
datasource.setPassword(db.getPassword());
datasource.setDriverClassName(db.getDriverClassName());
//datasource.setInitialSize(db.getInitialSize());
//datasource.setMinIdle(db.getMinIdle());
//datasource.setMaxActive(db.getMaxActive());
//datasource.setMaxWait(db.getMaxWait());
//datasource.setTimeBetweenEvictionRunsMillis(db.getTimeBetweenEvictionRunsMillis());
//datasource.setMinEvictableIdleTimeMillis(db.getMinEvictableIdleTimeMillis());
//datasource.setValidationQuery(db.getValidationQuery());
//datasource.setTestOnReturn(db.isTestOnReturn());
//datasource.setPoolPreparedStatements(db.isPoolPreparedStatements());
//datasource.setMaxPoolPreparedStatementPerConnectionSize(db.getMaxPoolPreparedStatementPerConnectionSize());
//datasource.setUseGlobalDataSourceStat(db.isUseGlobalDataSourceStat());
try {
datasource.setFilters(db.getFilters());
} catch (SQLException e) {
logger.error("setFilters Exception : ", e);
}
//datasource.setConnectionProperties(db.getConnectionProperties());
datasource.setValidationQuery(db.getValidationQuery());
return datasource;
}
@Bean(name = DATA_SOURCE_KY_USER)
@Qualifier(DATA_SOURCE_KY_USER)
@ConfigurationProperties(prefix = "spring.datasource.ky_user")
public DataSource kyUserDataSource(@Qualifier("kyUserDBConfig") KyUserDBConfig db) {
//return DataSourceBuilder.create().build();
// 屏蔽採用自動注入方式, 採用druidDataSource方式加載數據庫數據源 by zhangjf 20190509 add
final DruidDataSource datasource = new DruidDataSource();
datasource.setName(db.getName());
datasource.setUrl(db.getUrl());
datasource.setUsername(db.getUsername());
datasource.setPassword(db.getPassword());
datasource.setDriverClassName(db.getDriverClassName());
//datasource.setInitialSize(db.getInitialSize());
//datasource.setMinIdle(db.getMinIdle());
//datasource.setMaxActive(db.getMaxActive());
//datasource.setMaxWait(db.getMaxWait());
//datasource.setTimeBetweenEvictionRunsMillis(db.getTimeBetweenEvictionRunsMillis());
//datasource.setMinEvictableIdleTimeMillis(db.getMinEvictableIdleTimeMillis());
//datasource.setValidationQuery(db.getValidationQuery());
//datasource.setTestOnReturn(db.isTestOnReturn());
//datasource.setPoolPreparedStatements(db.isPoolPreparedStatements());
//datasource.setMaxPoolPreparedStatementPerConnectionSize(db.getMaxPoolPreparedStatementPerConnectionSize());
//datasource.setUseGlobalDataSourceStat(db.isUseGlobalDataSourceStat());
try {
datasource.setFilters(db.getFilters());
} catch (SQLException e) {
logger.info("setFilters Exception : ", e);
}
//datasource.setConnectionProperties(db.getConnectionProperties());
datasource.setValidationQuery(db.getValidationQuery());
return datasource;
}
@Bean(name = DATA_SOURCE_KY_ORDER)
@Qualifier(DATA_SOURCE_KY_ORDER)
@ConfigurationProperties(prefix = "spring.datasource.ky_order")
public DataSource kyOrderDataSource(@Qualifier("kyOrderDBConfig") KyOrderDBConfig db) {
//return DataSourceBuilder.create().build();
// 屏蔽採用自動注入方式, 採用druidDataSource方式加載數據庫數據源 by zhangjf 20190509 add
final DruidDataSource datasource = new DruidDataSource();
datasource.setName(db.getName());
datasource.setUrl(db.getUrl());
datasource.setUsername(db.getUsername());
datasource.setPassword(db.getPassword());
datasource.setDriverClassName(db.getDriverClassName());
//datasource.setInitialSize(db.getInitialSize());
//datasource.setMinIdle(db.getMinIdle());
//datasource.setMaxActive(db.getMaxActive());
//datasource.setMaxWait(db.getMaxWait());
//datasource.setTimeBetweenEvictionRunsMillis(db.getTimeBetweenEvictionRunsMillis());
//datasource.setMinEvictableIdleTimeMillis(db.getMinEvictableIdleTimeMillis());
//datasource.setValidationQuery(db.getValidationQuery());
//datasource.setTestOnReturn(db.isTestOnReturn());
//datasource.setPoolPreparedStatements(db.isPoolPreparedStatements());
//datasource.setMaxPoolPreparedStatementPerConnectionSize(db.getMaxPoolPreparedStatementPerConnectionSize());
//datasource.setUseGlobalDataSourceStat(db.isUseGlobalDataSourceStat());
try {
datasource.setFilters(db.getFilters());
} catch (SQLException e) {
logger.error("setFilters Exception : ", e);
}
//datasource.setConnectionProperties(db.getConnectionProperties());
datasource.setValidationQuery(db.getValidationQuery());
return datasource;
}
}
編寫DataDruidConfig類,如下:
@Configuration
public class DataDruidConfig {
@Value("${druid.monitor.loginUsername}")
private String loginUsername;
@Value("${druid.monitor.loginPassword}")
private String loginPassword;
@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");
return filterRegistrationBean;
}
@Bean
public ServletRegistrationBean druidServlet() {
ServletRegistrationBean reg = new ServletRegistrationBean();
reg.setServlet(new StatViewServlet());
reg.addUrlMappings("/druid/*");
reg.setServlet(new StatViewServlet());
Map<String, String> initParameters = new HashMap<>();
initParameters.put("resetEnable", "false"); //禁用HTML頁面上的“Rest All”功能
//initParameters.put("allow", "10.8.9.115"); //ip白名單(沒有配置或者爲空,則允許所有訪問)
initParameters.put("loginUsername", StringUtils.isNotBlank(loginUsername) ? loginUsername : "admin");
; //監控頁面登錄用戶名
initParameters.put("loginPassword", StringUtils.isNotBlank(loginPassword) ? loginPassword : "admin"); //監控頁面登錄用戶密碼
//initParameters.put("deny", "127.0.0.1"); //ip黑名單
//如果某個ip同時存在,deny優先於allow
reg.setInitParameters(initParameters);
return reg;
}
}
項目啓動,訪問項目地址:http://localhost:8080/druid/login.html
就可以訪問如下界面: