如何在 Spring 的静态字段中注入值?

我的程序试图为我的 Oracle 数据库进行 Spring 配置。我想从 application.properties 获取值,而不是在我的 DBcpdataSource java 类中硬编码用户名和密码。但是,我一直面临这个问题,即 spring 无法将属性值注入我的 java 类。它一直显示 java.lang.NullPointerException 错误。

我的代码如下:

DBcpdataSource.java

package com.pms.pmsapp.util;

import java.sql.Connection;
import java.sql.SQLException;

import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.beans.factory.annotation.Value;

public class DBcpdataSource {

    @Value("${spring.datasource.url}")
    private String url;

    private static String URL_STATIC;

    @Value("${spring.datasource.url}")
    public void setUrl(String url){
        DBcpdataSource.URL_STATIC = url;
    }
    
    @Value("${spring.datasource.username}")
    private String username;

    private static String username_STATIC;

    @Value("${spring.datasource.username}")
    public void setusername(String username){
        DBcpdataSource.username_STATIC = username;
    }
    
    @Value("${spring.datasource.password}")
    private String password;

    private static String PASSWORD_STATIC;

    @Value("${spring.datasource.password}")
    public void setPassword(String password){
        DBcpdataSource.PASSWORD_STATIC = password;
    }

    private static BasicDataSource ds = new BasicDataSource();

    static {
        ds.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
        ds.setusername("PMS_APP");
        ds.setPassword("password");
        ds.setMinIdle(5);
        ds.setMaxIdle(10);
        ds.setMaxOpenPreparedStatements(100);
    }
    
    public static Connection getconnection() throws SQLException {
        return ds.getconnection();
    }
    
    private DBcpdataSource(){ }
}

application.properties

spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe
spring.datasource.username=pms_app
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false

所以每当程序调用dBcpdataSource.getconnection()时,都会显示NullPointerException:

org.apache.commons.dbcp.SQLnestedException: Cannot create JDBC driver of class '' for connect URL 'null'
    at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452) ~[commons-dbcp-1.4.jar:1.4]
    at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371) ~[commons-dbcp-1.4.jar:1.4]
    at org.apache.commons.dbcp.BasicDataSource.getconnection(BasicDataSource.java:1044) ~[commons-dbcp-1.4.jar:1.4]
    at com.pms.pmsapp.util.DBcpdataSource.getconnection(DBcpdataSource.java:91) ~[classes/:na]

当我在静态类中硬编码细节时,程序将正常运行。以下代码运行良好。

        ds.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
        ds.setusername("PMS_APP");
        ds.setPassword("password");
        ds.setMinIdle(5);
        ds.setMaxIdle(10);
        ds.setMaxOpenPreparedStatements(100);
    }

我仔细参考了这篇文章,但无法让它发挥作用。 https://www.baeldung.com/spring-inject-static-field

我也尝试过使用@ConfigurationProperties 方法将属性值注入到我的 java 类中,但失败了。它给了我同样的问题。 https://www.baeldung.com/configuration-properties-in-spring-boot

谁能发现任何错误?

hgp_11 回答:如何在 Spring 的静态字段中注入值?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3409.html

大家都在问