springboot druid 多数据源初始化
springboot druid 整合,项目初始化的时候只初始化了 Primary 数据源
@Bean(name = "primaryDataSource")
@Primary
public DataSource primaryDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}
其他数据源在注入的时候并没有进行初始化,而是等到调用的时候才进行注入。
@Bean(name = "secondaryDataSource")
public DataSource secondaryDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}
在服务调用的时候初始化了cluster数据源,druid源码显示druid 在获取连接的时候才进行数据源的初始化,而@Primary 注解的数据源在项目启动的时候会初始化数据源,@Primary注解 会从多个候选的实现中 选择有这个注解的bean 去注入
为了让其他数据源在项目初始化的时候也进行初始化,可以在其他数据源@Bean注解中指定initMethod,这样就可以在项目初始化的时候 也初始化其他的数据源了
@Bean(name = "secondaryDataSource" inMethod="init")
public DataSource secondaryDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}