清理sqlite db文件关闭

时间:2018-06-14 13:04:55

标签: sqlite spring-boot jooq

一旦原型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);

1 个答案:

答案 0 :(得分:0)

  

这是一个与您所问的问题完全不同的问题,并且在这里已经有了答案:stackoverflow.com/q/8831514/521799 – Lukas Eder

根据提供的链接,我们可以在网址末尾使用::memory:来创建内存中的sqlite文件,而无需进行其他清理。