我的程序试图为我的 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
谁能发现任何错误?