在 Eclipse 中使用 Spring @Value 注释会导致字段未初始化错误

发布于 2025-01-11 19:29:13 字数 3666 浏览 5 评论 0原文

我目前正在 Eclipse IDE 中开发一个 Spring Boot 应用程序,其中包含一个 Connection 类,该类需要知道要连接到哪个数据源。我决定通过 @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 注释的含义,但情况似乎并非如此。我该如何解决这个问题?我自己是否误解了其中的含义?

application.properties:

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

I am currently developing a Spring Boot application in the Eclipse IDE with a Connection class which needs to know which data source to connect to. I decided to let it know this property from Spring's application.properties, through the @Value annotation:

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

where DataSource is an enum representing the possible data sources. However, in this method, I get a "Blank final field DATA_SOURCE may not have been initialized" error:

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

Inserting a default value doesn't work, either:

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

still gives the same error.
I tried to install the Spring Tools 4 plugin for Eclipse to check if this was just Eclipse not understanding the @Value annotation's implications, but it seems like this isn't the case. How do I solve this problem? Am I misunderstanding the implications myself?

application.properties:

project.datasource = POSTGRE_LOCAL

Project tree:

|   .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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

长伴 2025-01-18 19:29:13

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

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

应该可以正常工作。

You cannot add @Value to a final field.

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

should work just fine.

冬天旳寂寞 2025-01-18 19:29:13

反转“$”和“{”。表达式语法为“${...}”。

Reverse the "$" and "{". The expression syntax is "${...}".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文