三种方式注册数据源
(1)固定的数据源可以在配置文件中提前配置好
参考连接池配置参数 不同版本的参数会有所区别,准确参数参考连接池的类属性(就是打开项目中依赖的连接池类的源码看看属性,如HikariDataSource、DruidDataSource)
这里用application.properties配置,yml类似
参考连接池配置参数 不同版本的参数会有所区别,准确参数参考连接池的类属性(就是打开项目中依赖的连接池类的源码看看属性,如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>
切换数据源参考 三种方式切换数据源