bean-компонент источника данных загрузки весеннего облака раньше, чем синтаксический анализ placeHolder - PullRequest
0 голосов
/ 26 июня 2018

После того, как я импортировал jar-файл spring-cloud-context в свой проект spring-boot2, он не смог проанализировать свойство placeHolder в моей конфигурации bean-компонента "org.apache.tomcat.jdbc.pool.DataSource".Но то же свойство placeHolder в другой конфигурации компонента успешно проанализировано.

Другой компонент источника данных, такой как "com.alibaba.druid.pool.DruidDataSource", также имеет ту же проблему.Какой класс конфигурации в контексте spring-cloud так активно вызывает bean-компонент источника данных весенней загрузки?

enter image description here spring config:

<bean id="dataSourceTarget" class="org.apache.tomcat.jdbc.pool.DataSource"
    destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="${mysql.url}" />
    <property name="username" value="${mysql.username}" />
    <property name="password" value="${mysql.password}" />

    <property name="testWhileIdle" value="true" />
    <property name="testOnBorrow" value="true" />
    <property name="testOnReturn" value="false" />
    <property name="validationInterval" value="60000" />
    <property name="validationQuery" value="select 1 from dual" />
    <property name="maxActive" value="100" />
    <property name="minIdle" value="1" />
</bean>
<bean id="configTest1" class="wzp.rest.service.ConfigTest"
    primary="true">
    <property name="password" value="${mysql.password}" />
</bean>

pom.xml:

    <!-- feign -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-feign</artifactId>
        <version>1.4.4.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-archaius</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-netflix-archaius</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-netflix-ribbon</artifactId>
            </exclusion>
            <exclusion>
                <groupId>io.github.openfeign</groupId>
                <artifactId>feign-hystrix</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>io.github.openfeign</groupId>
        <artifactId>feign-httpclient</artifactId>
    </dependency>

1 Ответ

0 голосов
/ 11 октября 2018

Я использовал MapperFactoryBean mybatis для загрузки картографа, а MapperFactoryBean загружал sqlSessionFactory и bean-компонент источника данных раньше, чем PropertySourcesPlaceholderConfigurer, изменяя местозаполнитель.

Когда я использую org.mybatis.spring.mapper.Mapperr проблемный маушел.

@ ConditionalOnMissingBean заставляет все фабричные bean-компоненты и их зависимые bean-объекты инициализироваться рано, и их функция getObjectType вызывается до того, как были проанализированы заполнители в их определении.Затем Spring Cloud Configuration Client в Spring-Cloud-Context Jar делает обычным PropertySourcesPlaceholderConfigurer не может анализировать и обновлять заполнители этих бинов.Такое поведение можно запретить, установив для кого не использовать облачный конфиг:

spring.cloud.config.enabled=false
spring.cloud.refresh.enabled=false
...