【问题标题】:Using Spring @Value annotation results in field not initialized error in Eclipse在 Eclipse 中使用 Spring @Value 注释导致字段未初始化错误
【发布时间】:2022-08-19 19:32:14
【问题描述】:

我目前正在 Eclipse IDE 中开发一个带有 Connection 类的 Spring Boot 应用程序,该类需要知道要连接到哪个数据源。我决定通过 @Value 注释让它从 Spring 的 application.properties 中知道这个属性:

@Value(\"${project.datasource}\")
private final DataSource DATA_SOURCE;

其中 DataSource 是一个枚举,表示可能的数据源。但是,在这种方法中,我得到一个“空白最终字段 DATA_SOURCE 可能尚未初始化”错误:

private DBConnection() throws SQLException {
    ConnectionConfig config = new ConnectionConfig(DATA_SOURCE);
    connection = DriverManager.getConnection(config.getUrl(), config.getUSERNAME(), config.getPASSWORD());
}

插入默认值也不起作用:

@Value(\"${project.datasource:POSTGRE_LOCAL}\")

仍然给出同样的错误。 我尝试为 Eclipse 安装 Spring Tools 4 插件以检查这是否只是 Eclipse 不理解 @Value 注释的含义,但似乎情况并非如此。我该如何解决这个问题?我是否误解了自己的含义?

应用程序属性:

project.datasource = POSTGRE_LOCAL

项目树:

|   .classpath
|   .gitignore
|   .project
|   HELP.md
|   mvnw
|   mvnw.cmd
|   pom.xml
|   
+---.mvn
|   \\---wrapper
|           maven-wrapper.jar
|           maven-wrapper.properties
|           
+---.settings
|       org.eclipse.core.resources.prefs
|       org.eclipse.jdt.core.prefs
|       org.eclipse.m2e.core.prefs
|       org.springframework.ide.eclipse.prefs
|       
+---src
|   +---main
|   |   +---java
|   |   |   \\---org
|   |   |       \\---ingsw21
|   |   |           \\---backend
|   |   |               +---connection
|   |   |               |       DBConnection.java
|   |   |               |       
|   |   |               +---controllers
|   |   |               |       UserController.java
|   |   |               |       
|   |   |               +---DAOs
|   |   |               |       DAOUtente.java
|   |   |               |       
|   |   |               +---DAOSQL
|   |   |               |       DAOSQLUtente.java
|   |   |               |       
|   |   |               +---entities
|   |   |               |       Utente.java
|   |   |               |       
|   |   |               +---enums
|   |   |               |       DataSource.java
|   |   |               |       
|   |   |               \\---exceptions
|   |   |                       BadRequestWebException.java
|   |   |                       DataAccessException.java
|   |   |                       
|   |   \\---resources
|   |           application.properties
|   |           
|   \\---test
|       \\---java
|           \\---org
|               \\---ingsw21
|                   \\---backend
|                       \\---BackEnd
|                               BackEndApplicationTests.java
|                               
\\---target
    +---classes
    |   |   application.properties
    |   |   
    |   \\---org
    |       \\---ingsw21
    |           \\---backend
    |               +---connection
    |               |       DBConnection$ConnectionConfig.class
    |               |       DBConnection.class
    |               |       
    |               +---controllers
    |               |       UserController.class
    |               |       
    |               +---DAOs
    |               |       DAOUtente.class
    |               |       
    |               +---DAOSQL
    |               |       DAOSQLUtente.class
    |               |       
    |               +---entities
    |               |       Utente.class
    |               |       
    |               +---enums
    |               |       DataSource.class
    |               |       
    |               \\---exceptions
    |                       BadRequestWebException.class
    |                       DataAccessException.class
    |                       
    \\---test-classes
        \\---org

标签: spring eclipse annotations application.properties


【解决方案1】:

颠倒“$”和“{”。表达式语法是“${...}”。

【讨论】:

  • 这是真的,但它并没有解决问题。
  • 我假设您没有重新测试默认值的情况。通过修复表达式语法应该会得到不同的结果。对于非默认值测试用例,我会说这取决于您的项目结构和“application.properties”文件的一些问题,您在这里都没有显示。
  • 根据要求提供了附加信息。默认值情况已经过测试,给出了同样的问题。
【解决方案2】:

您不能将 @Value 添加到最终字段。

@Value("${project.datasource}")
private DataSource DATA_SOURCE;

应该可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-26
    • 2021-09-25
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    相关资源
    最近更新 更多