临时数据源操作
最后更新: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);