一旦原型bean在使用jooq starter的spring boot项目中超出范围,我们可以清理{filename} .db吗?
destroy方法需要获取文件名。
尝试将;DB_CLOSE_DELAY=-1
放在网址末尾,但似乎不能使用sqlite文件。期望DB_CLOSE_DELAY的某个值在结束时删除文件或在内存中执行。
@Bean
public Function<String, DSLContext> dslFactory() {
return this::dsl;
}
@Bean
@Scope("prototype")
@ConfigurationProperties("datasource")
public DefaultDSLContext dsl(String filename) {
DataSource dataSource = DataSourceBuilder.create()
.url("jdbc:sqlite:" + filename + ".db")
.build();
DefaultConfiguration jooqConfiguration = new DefaultConfiguration();
jooqConfiguration.set(new DataSourceConnectionProvider(new TransactionAwareDataSourceProxy(dataSource)));
jooqConfiguration.set(new DefaultExecuteListenerProvider(new ExceptionTranslator()));
DefaultDSLContext context = new DefaultDSLContext(jooqConfiguration);
return context;
}
用法:
@Autowired
private Function<String, DSLContext> dslFactory;
DSLContext dsl = dslFactory.apply("xxx");
尝试覆盖原型bean声明DefaultExecuteListener.end
,但会在每个dsl execute()
上调用它。像下面这样的东西是理想的 - 当最终的dslContext超出范围时使用lombok清理,即在上面有context.getBean/apply
的方法调用结束时,然后删除{filename} .db。
@Cleanup DefaultDSLContext context = new DefaultDSLContext(jooqConfiguration);
答案 0 :(得分:0)
这是一个与您所问的问题完全不同的问题,并且在这里已经有了答案:stackoverflow.com/q/8831514/521799 – Lukas Eder
根据提供的链接,我们可以在网址末尾使用::memory:
来创建内存中的sqlite文件,而无需进行其他清理。