当前位置: 首页 > 知识库问答 >
问题:

Spring Boot项目未从应用程序绑定@Value。属性

漆雕誉
2023-03-14

我正在将一个现有的多模块maven项目迁移到spring boot 2.6.1,我已经填充了这个应用程序。其中一个模块(具有SpringBootApplication入口点和SpringBootMaven插件的模块)的resources文件夹中的属性。我可以通过应用程序环境从项目中的任何模块访问这些属性。但是,使用@Value绑定属性不起作用

以下是我的项目结构

PROJ
└── pom.xml
└── ModuleA
    └── src
        └── main
            └── java
                └── com.example
                    └── abc
                        └── configuration
                            └── TestConfig.java
                        └── MyApplication.java
            └── resources
                └── application.properties
    └── pom.xml
└── ModuleB     

为什么@ConfigurationProperties或@Value的属性绑定失败?(我正在尝试使用@ConfigurationProperties将所有数据源属性绑定到ModuleB中的DataSourceProperties bean,如留档中所述-但这也不起作用。)

我尝试过的事情:

  • 提交申请。配置目录中的属性

代码:

波姆。xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>PROJ</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>
    <name>PROJ</name>

    <modules>
        <module>ModuleA</module>
        <module>ModuleB</module>
        <!-- Other modules -->
    </modules>

    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <develop.mode>true</develop.mode>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <develop.mode>false</develop.mode>
            </properties>
        </profile>
    </profiles>

    <properties>
        <!-- Project Properties -->
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- In House Modules -->
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>ModuleB</artifactId>
                <version>1.0</version>
            </dependency>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>ModuleA</artifactId>
                <version>1.0</version>
            </dependency>

            <!-- Spring -->
            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-instrument</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework.plugin</groupId>
                <artifactId>spring-plugin-core</artifactId>
                <version>${spring-plugin.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.plugin</groupId>
                <artifactId>spring-plugin</artifactId>
                <version>${spring-plugin.version}</version>
                <type>pom</type>
            </dependency>

            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-saml2-service-provider</artifactId>
                <version>5.5.0-BETA</version>
                <classifier>BETA</classifier>
            </dependency>
            <dependency>
                <groupId>org.springframework.security.oauth</groupId>
                <artifactId>spring-security-oauth</artifactId>
                <version>${spring-security-oauth.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.security.oauth</groupId>
                <artifactId>spring-security-oauth2</artifactId>
                <version>${spring-security-oauth.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-webmvc</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <!-- Various other dependencies -->
            
        </dependencies>

    </dependencyManagement>

    <build>
        <pluginManagement>
            <plugins>
                <!-- Various plugins  -->
            </plugins>
        </pluginManagement>
    </build>

</project>

模块A/pom。xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <artifactId>PROJ</artifactId>
        <groupId>com.example</groupId>
        <version>1.0</version>
    </parent>

    <artifactId>ModuleA</artifactId>
    <packaging>jar</packaging>
    <name>ModuleA</name>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <!-- In House Modules -->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>ModuleB</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

应用属性

# My datasource properties
app.datasource.myds.username=TestName

我的申请。JAVA

@SpringBootApplication
public class WSMBootApp {
    public static void main(String[] args) {
        SpringApplication.run(WSMBootApp.class, args);
    }
}

TestConfig.java

@Configuration
public class TestConfig {

    @Value("${app.datasource.myds.username}")
    public String un;

    @Bean(name = "testbean1")
    @Primary
    public Boolean testbean1() {
        System.out.println("Value un: " + un); // prints null
        return Boolean.FALSE;
    }

    @Bean(name = "testbean2")
    public Boolean testbean2(Environment env) {
        System.out.println("Env property: " + env.getProperty("app.datasource.myds.username")); // prints TestName 
        return Boolean.TRUE;
    }
}

共有1个答案

蓝恩
2023-03-14

我已经找到了Spring Boot没有将我的属性与@Value或@ConfigurationProperties自动关联的原因。事实证明,我尝试迁移的项目实现了一个PropertyPlaceholderConfigurer bean,该bean未能正确初始化属性。我已经删除了这个bean,应用程序现在正在加载并自动连接应用程序中的所有属性。属性(来自所有模块)

 类似资料:
  • 我正在使用SpringDoc1.4和Spring-Boot2.3,在OperationCustomizer类中,我需要从应用程序属性文件中读取值。但每次都将字段初始化为。规格如下 应用程序.属性 OperationCustomizer类

  • null 当我运行带有库项目的主项目时(通过gradle、sourceControl、gitRepository),我可以看到库项目中的属性是空的。 如何使库项目使用从主应用程序传递下来的属性?

  • 我在src/main/resources下创建了2个文件: 应用程序。属性 第一个具有从env变量中获取值的属性,而后者具有固定值。 根据这里的具体情况,我以这样的方式推出了Spring靴: 然而,不会产生任何影响,并且应用程序是局部的。属性似乎被忽略。 有什么提示吗?

  • 我正在将一个非常基本的web应用程序部署到Google应用程序引擎。我使用的是Springboot,我可以在本地很好地运行应用程序,但当我部署到Google时,应用程序引擎不会启动实例。我在启动时配置了一个云SQL数据源。 我有云sql配置属性配置src/main/Resources/application.properties.App Engine似乎找不到这些属性,所以它无法正确设置Cloud

  • 问题内容: 有没有比确定正在运行的node.js进程的根目录更好的方法?类似于,但适用于Node.js。我正在寻找尽可能可预测和可靠的东西。 问题答案: 有几种方法可以解决此问题,每种方法各有利弊: require.main.filename 从http://nodejs.org/api/modules.html: 直接从Node运行文件时,将其设置为。这意味着您可以通过测试确定文件是否已经直接运

  • 我的Spring Boot应用程序有一个文件application.yml,它不愿意运行。 根据日志,元素[simulator.geo.b12,simulator.geo.b13,simulator.geo.b21,simulator.geo.c6,simulator.geo.host]未绑定的原因。然而,这个属性是在application.yml设置的,编译器甚至会返回它的值。 如果有人能帮我解