临时数据源操作

最后更新:2023-10-18 19:48:20 | 状态:未完成

临时数据源操作可以通过ServiceProxy创建临时service

执行完后GC会自动回收,不需要像DataSoureHolder.reg注册的数据源那样 通过RuntimeHolder..destroy注销

//一、根据DataSource创建
String url = "jdbc:mysql://localhost:13306/simple?useUnicode=true&characterEncoding=UTF8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";
DruidDataSource ds = new DruidDataSource();
ds.setUrl(url);
ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
ds.setUsername("root");
ds.setPassword("root");
AnylineService service = ServiceProxy.temporary(ds);
LinkedHashMap<String, Table> tables = service.metadata().tables();
for(String key:tables.keySet()){
	System.out.println(key);
}

DataSource ds1 = DataSourceUtil.build("com.zaxxer.hikari.HikariDataSource", "com.mysql.cj.jdbc.Driver", url, "root", "root");
service = ServiceProxy.temporary(ds1);
tables = service.metadata().tables();
for(String key:tables.keySet()){
	System.out.println(key);
}
//二、根据JdbcTemplate创建,对于spring项目一般都有一个JdbcTemplate
service = ServiceProxy.temporary(template);

//事务控制,运行时动态创建的数据源不支持注解方式
DataSourceTransactionManager dstm = new DataSourceTransactionManager(ds1);
DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
// 定义事务传播方式 以及 其他参数都在definition中设置
definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = dstm.getTransaction(definition);
//service.insert();
dstm.commit(status);


首页 最近更新 搜索 提交 回复