如何使用 Liquibase CDI 注入 searchPath 参数

问题描述 投票:0回答:1

我尝试在使用 Liquibase CDI 时注入 searchPath 参数,但下面的方法似乎都不起作用。由于情况超出我的控制范围,这是我修改 liquibase 设置的唯一方法。

    // LiquibaseProducer.java
    
    package de.XXXX.XXXX.liquibase;

    import java.sql.SQLException;
    import java.util.HashMap;
    import java.util.Map;

    import javax.annotation.Resource;
    import javax.enterprise.context.Dependent;
    import javax.enterprise.inject.Produces;
    import javax.sql.DataSource;

    import liquibase.integration.cdi.CDILiquibaseConfig;
    import liquibase.integration.cdi.annotations.LiquibaseType;
    import liquibase.resource.ClassLoaderResourceAccessor;
    import liquibase.resource.ResourceAccessor;

    /**
     * CDI Producer to configure the CDI Liquibase integration.
     */
    @Dependent
    public class LiquibaseProducer {

        /** Used liquibase author. */
        public static final String LIQUIBASE_AUTHOR = "liquibase-auto";

        /** Datasource. */
        @Resource(mappedName = "XXXXXXXXX", name = "XXXXXX", type = DataSource.class)
        private DataSource dataSource;

        /** Creating the liquibase configuration. */
        @SuppressWarnings("static-method")
        @Produces
        @LiquibaseType
        public CDILiquibaseConfig createConfig() {
            CDILiquibaseConfig tConfig = new CDILiquibaseConfig();
            
            Map<String, String> tempMap = new HashMap<>();
            tempMap.put("searchPath", "./testpath");
            tempMap.put("search-path", "./testpaaaath/");
            tempMap.put("search-path", "LIQUIBASE_SEARCH_PATH=./testingpath");
            tempMap.put("liquibase.searchPath", "./testpathxyyz");
            tConfig.setParameters(tempMap);
            tConfig.setChangeLog("db/changelog/init.xml");
            return tConfig;
        }

        /** Creating the Datasource. */
        @Produces
        @LiquibaseType
        public DataSource createDataSource() throws SQLException {
            return dataSource;
        }

        /** Creating the ResourceAccessor. */
        @Produces
        @LiquibaseType
        public ResourceAccessor create() {
            return new ClassLoaderResourceAccessor(getClass().getClassLoader());
        }

    }
java cdi liquibase
1个回答
0
投票

这些参数用作变更日志参数,而不是 liquibase 参数:这就是它们不起作用的原因。您需要在范围内设置它,但我看不到在 CDI 中执行此操作的方法。

也许您可以设置 ResourceAcessor 并根据您的需要驯服它。我猜 CDI 使用 DirectoryResourceAcessor 但您可以创建一个更适合您需求的,例如 Maven 插件中使用的 SearchPath

© www.soinside.com 2019 - 2024. All rights reserved.