Spring Boot - настраиваемые beans

Как я могу загрузить свои Spring beans из внешнего XML-файла?

Пример xml:

<bean class = "com.mycompany.Config">
    <property name = "targets">
        <list>
            <bean class = "com.mycompany.Target">
                <property name = "url">http://bla</property>
                <property name = "authentication">
                    <bean class = "com.mycompany.Auth">
                        <property name = "type" value = "basic"/>
                        <property name = "user" value = "user1"/>
                        <property name = "pass" value = "asdf"/>
                    </bean>
                </property>
            </bean>
            <bean class = "com.mycompany.Target">
                <property name = "url">http://otherbla</property>
                <property name = "authentication">
                    <bean class = "com.mycompany.Auth">
                        <property name = "type" value = "basic"/>
                        <property name = "user" value = "user2"/>
                        <property name = "pass" value = "start123"/>
                    </bean>
                </property>
            </bean>
            [as many Target beans as I want]
        </list>
    </property>
</bean>

Весенняя загрузка:

@SpringBootApplication(scanBasePackages = {"com.mycompany"})
@ImportResource({"file:config/config.xml"})
public class Application {

    /**
     * Spring Boot Startpoint.
     *
     * @param args Commandline arguments
     */
    public static void main(final String[] args) {
        ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args);
    }
}

Я пробовал разные способы, но ни один из них не работал. Если я включу xml в свою банку, я понятия не имею, как я могу перезаписать ее извне ВНЕ баночки. В противном случае тесты не смогут запустить контекст. Как мне настроить @ImportResource({"file:config/config.xml"}), чтобы приложение могло найти xml И все тесты прошли?

Мне нужно внешне настроить целевой компонент.

попробуйте @ImportResource({"classpath*:config/config.xml"}). Где эта папка с конфигами? под ресурсами?

pvpkiran 08.06.2018 16:49

@pvpkiran папка конфигурации - это папка конфигурации весенней загрузки, где находится application.properties. с "classpath" файл в файловой системе НЕ загружается и не перезаписывает файл в JAR ...

Pali 08.06.2018 18:47
1
2
95
1

Ответы 1

Поскольку я не нашел ответа, мне пришла в голову следующая идея:

Один класс @Configuration в моих основных классах с @Profile("default") и @ImportResource("file:/config/beans.xml"), а другой класс @Configuration в моих тестовых классах с @Profile("!default") и @ImportResource("classpath*:test-beans.xml").

Полный POC см. https://gitlab.com/Sheldor5/configurable-spring-boot-sample

Другие вопросы по теме