3 回答
TA贡献1824条经验 获得超5个赞
不要创建 jdbc 模板 bean。相反,每次需要执行查询时,您都可以使用实体管理器工厂来创建 jdbc 模板的新实例。这种方法对我有用。
public class JdbcQueryTemplate {
public JdbcTemplate getJdbcTemplate(EntityManagerFactory emf) {
EntityManagerFactoryInfo info = (EntityManagerFactoryInfo) emf;
return new JdbcTemplate(info.getDataSource());
}
public NamedParameterJdbcTemplate getNamedJdbcTemplate(EntityManagerFactory emf) {
EntityManagerFactoryInfo info = (EntityManagerFactoryInfo) emf;
return new NamedParameterJdbcTemplate(info.getDataSource());
}
}
然后使用该类进行查询。
public class Test{
@Autowired
private EntityManagerFactory entityManagerFactory;
public List<Entity> executeQuery() {
return new JdbcQueryTemplate().getNamedJdbcTemplate(entityManagerFactory)
.query("query", new BeanPropertyRowMapper<>(Entity.class));
}
}
TA贡献1871条经验 获得超8个赞
没有一种简单的方法可以做到这一点,JdbcTemplate
因为有些方法非常通用,例如execute(ConnectionCallback<T> action)
方法允许直接访问java.sql.Connection
对象。
DataSource
为每个租户拥有一个单独的bean 并在 Spring 中使用合格的自动装配来解决这个问题会更容易。
拥有每个租户java.sql.Connection
将允许在USE tenantIdentifier
打开新数据库连接时执行语句(一些池库支持开箱即用)。作为MySQL USE 语句文档,这可以在每个会话中完成一次:
USE db_name 语句告诉 MySQL 使用 db_name 数据库作为后续语句的默认(当前)数据库。数据库将保持默认状态,直到会话结束或发出另一个 USE 语句。
添加回答
举报