本文介紹了在Liqubase CustomTaskChange類中使用其他Spring Bean的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我需要執行一些數據遷移,這太復雜了,無法在Liquid Base變更集中完成。我們使用彈簧
這就是為什么我編寫了一個實現liquibase.change.custom.CustomTaskChange類的類。然后,我從變更集中引用它。
到目前為止一切都很好。
我的問題是:
是否可以從此類中訪問其他Spring Bean?
當我嘗試在這個類中使用自動連接的Bean時,它是空的,這讓我認為自動連接在這一點上根本沒有完成?
我還讀到了其他一些線程,Liquibase Bean必須在所有其他Bean之前初始化,對嗎?
以下是我編寫的類的一個片段:
@Component
public class UpdateJob2 implements CustomTaskChange {
private String param1;
@Autowired
private SomeBean someBean;
@Override
public void execute(Database database) throws CustomChangeException {
try {
List<SomeObject> titleTypes = someBean.getSomeObjects(
param1
);
} catch (Exception e) {
throw new CustomChangeException();
}
...
我得到一個異常,調試時我可以看到某個Bean為空。
以下是SpringLiquibase的配置:
@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
@ComponentScan({
"xxx.xxx.."})
public class DatabaseConfiguration {
@Bean
public SpringLiquibase springLiquibase() {
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setDataSource(dataSource());
liquibase.setChangeLog("classpath:liquibase-changelog.xml");
return liquibase;
}
...
更多配置:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
<includeAll path="dbschema"/>
</databaseChangeLog>
此處來自變更集的調用:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
<changeSet id="201509281536" author="sr">
<customChange class="xxx.xxx.xxx.UpdateJob2">
<param name="param1" value="2" />
</customChange>
</changeSet>
推薦答案
您的changeset.xml中引用的類不是由Spring托管的,因此像DI這樣很酷的東西將無法工作。
您可以做的是將SpringBean注入到非Spring對象中。查看此答案:https://stackoverflow.com/a/1377740/4365460
這篇關于在Liqubase CustomTaskChange類中使用其他Spring Bean的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,