我必须使用带有spring jdbc和tomcat连接池的临时表到mysql。 我有4个声明:
我为每个人使用此代码:
getJdbcTemplate().execute(sql);
我遇到了问题,因为表格在第二个语句中不存在:
表' tmp_table'不存在
我认为问题可能是连接池,因为临时表只能由一个连接访问,并且在连接关闭时会被删除。
这是我的数据源和txManager配置:
@Configuration
@EnableTransactionManagement
public class DBConfiguration {
@Bean(destroyMethod = "close")
public javax.sql.DataSource dataSource() {
...
}
@Bean
public DataSourceTransactionManager txManager()
{
DataSourceTransactionManager tx= new DataSourceTransactionManager(dataSource());
return tx;
}
}
我该如何解决这个问题?我需要创建一个新的非池连接?
答案 0 :(得分:0)
我尝试的解决方案是使用 SingleConnectionDataSource。
像这样。
SingleConnectionDataSource scds = new SingleConnectionDataSource(jdbc.getDataSource().getConnection(), true);
JdbcTemplate scdsjdbc = new JdbcTemplate(scds);
scdsjdbc.execute("EXECUTE CREATE TEMPORARY TABLE QUERY!!");
//file import with postgresql copy command. path is temporary file path.
CopyManager cm = new CopyManager(scdsTmp.getDataSource().getConnection().unwrap(BaseConnection.class));
cm.copyIn("copy tmp_tenant_product from STDIN with csv", new FileReader(path.toFile()));
//result will be filled with the temporary table records
List<Map<String, Object>> result = scdsTmp.queryForList("SELECT * FROM tmp_tenant_product");