三种方式注册数据源

(1)固定的数据源可以在配置文件中提前配置好
参考连接池配置参数  不同版本的参数会有所区别,准确参数参考连接池的类属性(就是打开项目中依赖的连接池类的源码看看属性,如HikariDataSource、DruidDataSource)
这里用application.properties配置,yml类似
#一般先有一个默认数据源(并不是主从关系中的主)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.220.100:3306/simple?useUnicode=true&characterEncoding=UTF8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
spring.datasource.user-name=root
spring.datasource.password=root

#这里先声明一下都有哪些数据源(用anyline或spring前缀到可以,anyline会多一个补齐提示)
anyline.datasource.list=crm,erp
#或
anyline.datasource-list=crm,erp

#为每个数据源设置属性
anyline.datasource.crm.driver-class-name=com.mysql.cj.jdbc.Driver
anyline.datasource.crm.url=jdbc:mysql://192.168.220.100:3306/simple_crm?useUnicode=true&characterEncoding=UTF8&useSSL=false
...其他属性

anyline.datasource.erp.driver-class-name=com.mysql.cj.jdbc.Driver
anyline.datasource.erp.url=jdbc:mysql://192.168.220.100:3306/simple_erp?useUnicode=true&characterEncoding=UTF8&useSSL=false
...

(2)在Java中设置连接参数、由spring创建实例
如在运行过程中由用户动态添加数据源

// 这种方式只在写Hello World时用一下看看效果
String url = "jdbc:mysql://192.168.220.100:3306/simple_crm?useUnicode=true&characterEncoding=UTF8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";
DataSourceHolder.reg("crm", "com.zaxxer.hikari.HikariDataSource", "com.mysql.cj.jdbc.Driver", url, "root", "root");

//生产环境一定要这样,把属性放在Map中注册,因为默认的连接数可能不够用以及更多的微调参数需要设置 
Map<String,?> params = new HashMap();
params.put("driver-class","com.mysql.cj.jdbc.Driver");      //有些示例代码中没有设置driver是因为一些常用的数据库可以识别driver,最好还是写上
params.put("userNmae","root");                              //各种格式都可以user-name
...
DataSourceHolder.reg("crm", params); 

(3)在Java中创建实例交给spring管理
druid的参数比较多与srping默认数据源的属性差别比较大,就不用挨个确认属性名与类型了,直接在Java中调用setter方法设置

DruidDataSource ds2= new DruidDataSource();                 //这里不像上面那样设置连接池class,直接创建实例
ds2.setUrl(url);
ds2.setDriverClassName("com.mysql.cj.jdbc.Driver");
ds2.setUsername("root");
ds2.setPassword("root");
DataSourceHolder.reg("ds2", ds2);
DataSourceHolder.setDataSource("ds2");
service.query("crm_customer");

(4)如果算上临时数据源的话应该还有第4种
有些场景中只是临时用一次,用完之后很长时间空闲,如果按上面的情况注册数据源,用完之后还需要JDBCRuntimeHolder.destroy(key)注销数据源及一系列相关的bean
所以可以临时注册一个用完就不用管了GC会自动回收,参考【临时数据源操作

DruidDataSource ds = new DruidDataSource();
ds.setUrl(url);
AnylineService service = ServiceProxy.temporary(ds);
需要注意的是数据源用到的驱动需要在pom里添加依赖,如mysql
<dependency>
	<groupId>org.anyline</groupId>
	<artifactId>anyline-data-jdbc-mysql</artifactId>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>

切换数据源参考 三种方式切换数据源

最近更新 搜索 提交