为什么在使用Spring PropertySourcesPlaceholderConfigurer时Annotation @Value返回始终为null?

5月12

同事,这似乎是一个愚蠢的问题,但我无法从属性文件中读取属性。

我有一个Spring Configuration类:

@EnableWs
@Configuration
@PropertySource("classpath:appl.properties")

public class WebServiceConfig extends WsConfigurerAdapter {
    /*Some beans*/


    @Bean
    public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
        return new PropertySourcesPlaceholderConfigurer();
    }


    @Value("${db_name.db.url}")
    private String DBUrl;

    @Bean
    @ConfigurationProperties(prefix="datasource.secondary")
    public BasicDataSource DBDataSource() {

        System.out.println("DBUrl: " + DBUrl);

        BasicDataSource DBDataSource = new BasicDataSource();

        DWDataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        DWDataSource.setUrl(DBUrl);
        DWDataSource.setUsername("user");
        DWDataSource.setPassword("pass");
        DWDataSource.setMaxIdle(10);
        DWDataSource.setMaxWaitMillis(10000);
        DWDataSource.setValidationQuery("select 1");
        DWDataSource.setTestOnBorrow(false);
        DWDataSource.setTestWhileIdle(true);
        DWDataSource.setDefaultAutoCommit(true);

        return DBDataSource;

    }
}

属性文件如下所示:

#bla bla bla
#bla bla bla
#bla bla bla
db_name.db.url=jdbc:sqlserver://bla
db_name.db.user=user
db_name.db.password=pass

当我运行程序并尝试调用DB时,我收到下一个堆栈跟踪:

INFO:[oct-27 10:48:48,834] service.app.WsEndpoint-检索数据库元数据时出错;嵌套的异常是org.springframework.jdbc.support.Me taDataAccessException:无法获取用于提取元数据的Connection。嵌套的异常是org.springframework.jdbc.CannotGetJdbcConnectionExc eption:无法获取JDBC连接;无法获取JDBC连接。嵌套异常为java.sql.SQLException:无法为连接URL'null'创建类'com.microsoft.sqlserver.jdb c.SQLServerDriver'的JDBC驱动程序

而且没有其他例外。

但是在属性文件中我有 db_name.db.url=db_name.db.url=jdbc:sqlserver://bla

为什么要为空?

另外,如果我改变了

@Value("${db_name.db.url}")
private String DBWUrl;

@Value("${db_name.db.url}")
    private String DBUrl = "jdbc:sqlserver://bla";

在Spring配置Java类中,我可以正常工作。

更新

春季启动日志:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.2.5.RELEASE)

INFO : [oct-27 11:37:53,555] service.app.WsApplication - Starting WsApplication on MyPC with PID 6688 (C:\Users\Maya\workspace\WS\ta
rget\classes started by Maya in C:\Users\Maya\workspace\WS)
INFO : [oct-27 11:37:53,635] context.embedded.AnnotationConfigEmbeddedWebApplicationContext - Refreshing org.springframework.boot.context.embedde
d.AnnotationConfigEmbeddedWebApplicationContext@10bbd20a: startup date [Tue Oct 27 11:37:53 MSK 2015]; root of context hierarchy
INFO : [oct-27 11:37:54,868] factory.support.DefaultListableBeanFactory - Overriding bean definition for bean 'beanNameViewResolver': replacing [
Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factor
yBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewRe
solver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAut
oConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; de
pendencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvc
AutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resour
ce [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]]
INFO : [oct-27 11:37:55,511] internal.util.Version - HV000001: Hibernate Validator 5.1.3.Final
INFO : [oct-27 11:37:55,693] context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'webServiceConfig' of type [class
com.mayacomp.service.app.WebServiceConfig$$EnhancerBySpringCGLIB$$9406d7b6] is not eligible for getting processed by all BeanPostProcessors
(for example: not eligible for auto-proxying)
INFO : [oct-27 11:37:55,713] context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.ws.config.ann
otation.DelegatingWsConfiguration' of type [class org.springframework.ws.config.annotation.DelegatingWsConfiguration$$EnhancerBySpringCGLIB$$f512
4549] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
INFO : [oct-27 11:37:55,785] addressing.server.AnnotationActionEndpointMapping - Supporting [WS-Addressing August 2004, WS-Addressing 1.0]
INFO : [oct-27 11:37:55,864] context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.a
nnotation.ProxyTransactionManagementConfiguration' of type [class org.springframework.transaction.annotation.ProxyTransactionManagementConfigurat
ion$$EnhancerBySpringCGLIB$$723342a] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying
)
INFO : [oct-27 11:37:55,888] context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'transactionAttributeSource' of ty
pe [class org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] is not eligible for getting processed by all BeanPostP
rocessors (for example: not eligible for auto-proxying)
INFO : [oct-27 11:37:55,903] context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'transactionInterceptor' of type [
class org.springframework.transaction.interceptor.TransactionInterceptor] is not eligible for getting processed by all BeanPostProcessors (for ex
ample: not eligible for auto-proxying)
INFO : [oct-27 11:37:55,909] context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.transaction.c
onfig.internalTransactionAdvisor' of type [class org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor] is not
 eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
INFO : [oct-27 11:37:56,557] embedded.tomcat.TomcatEmbeddedServletContainer - Tomcat initialized with port(s): 8080 (http)
INFO : [oct-27 11:37:56,933] catalina.core.StandardService - Starting service Tomcat
INFO : [oct-27 11:37:56,935] catalina.core.StandardEngine - Starting Servlet Engine: Apache Tomcat/8.0.23
INFO : [oct-27 11:37:57,077] [Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
INFO : [oct-27 11:37:57,078] web.context.ContextLoader - Root WebApplicationContext: initialization completed in 3447 ms
INFO : [oct-27 11:37:57,902] context.embedded.ServletRegistrationBean - Mapping servlet: 'messageDispatcherServlet' to [/services/*]
INFO : [oct-27 11:37:57,904] context.embedded.ServletRegistrationBean - Mapping servlet: 'dispatcherServlet' to [/]
INFO : [oct-27 11:37:57,912] context.embedded.FilterRegistrationBean - Mapping filter: 'characterEncodingFilter' to: [/*]
INFO : [oct-27 11:37:57,913] context.embedded.FilterRegistrationBean - Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
DBUrl: jdbc:sqlserver://bla
INFO : [oct-27 11:37:59,160] method.annotation.RequestMappingHandlerMapping - Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produ
ces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boo
t.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
INFO : [oct-27 11:37:59,161] method.annotation.RequestMappingHandlerMapping - Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produ
ces=[text/html],custom=[]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorControl
ler.errorHtml(javax.servlet.http.HttpServletRequest)
INFO : [oct-27 11:37:59,189] servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframew
ork.web.servlet.resource.ResourceHttpRequestHandler]
INFO : [oct-27 11:37:59,189] servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/**] onto handler of type [class org.springframework.web.
servlet.resource.ResourceHttpRequestHandler]
INFO : [oct-27 11:37:59,234] servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/**/favicon.ico] onto handler of type [class org.springfr
amework.web.servlet.resource.ResourceHttpRequestHandler]
INFO : [oct-27 11:37:59,399] export.annotation.AnnotationMBeanExporter - Registering beans for JMX exposure on startup
INFO : [oct-27 11:37:59,402] export.annotation.AnnotationMBeanExporter - Bean with name 'WorkDBDataSource' has been autodetected for JMX exposure

INFO : [oct-27 11:37:59,402] export.annotation.AnnotationMBeanExporter - Bean with name 'DWDataSource' has been autodetected for JMX exposure
INFO : [oct-27 11:37:59,408] export.annotation.AnnotationMBeanExporter - Located MBean 'WorkDBDataSource': registering with JMX server as MBean [
org.apache.commons.dbcp2:name=WorkDBDataSource,type=BasicDataSource]
INFO : [oct-27 11:37:59,411] export.annotation.AnnotationMBeanExporter - Located MBean 'DWDataSource': registering with JMX server as MBean [org.
apache.commons.dbcp2:name=DWDataSource,type=BasicDataSource]
INFO : [oct-27 11:37:59,446] coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"]
INFO : [oct-27 11:37:59,455] coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"]
INFO : [oct-27 11:37:59,478] util.net.NioSelectorPool - Using a shared selector for servlet write/read
INFO : [oct-27 11:37:59,505] embedded.tomcat.TomcatEmbeddedServletContainer - Tomcat started on port(s): 8080 (http)
INFO : [oct-27 11:37:59,509] service.app.WsApplication - Started WsApplication in 6.421 seconds (JVM running for 7.159)
克莱默

您可以使用Environment变量在application.properties中获取属性,例如

@Autowired
Environment env;

@Bean
@ConfigurationProperties(prefix="datasource.secondary")
    public BasicDataSource DBDataSource() {
        // Notice this line
        System.out.println("DBUrl: " + env.getProperty("db_name.db.url"));

        BasicDataSource DBDataSource = new BasicDataSource();

        DWDataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        DWDataSource.setUrl(DBUrl);
        DWDataSource.setUsername("user");
        DWDataSource.setPassword("pass");
        DWDataSource.setMaxIdle(10);
        DWDataSource.setMaxWaitMillis(10000);
        DWDataSource.setValidationQuery("select 1");
        DWDataSource.setTestOnBorrow(false);
        DWDataSource.setTestWhileIdle(true);
        DWDataSource.setDefaultAutoCommit(true);

        return DBDataSource;

    }

注意:application.properties文件必须位于类路径(src / main / resources)中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用NotificationListenerService时,getActiveNotifications始终为null

Spring @Value注释始终评估为null?

使用Spring Boot和Spring JPA时-为什么无法为依赖项的实体生成架构?

Spring MVC为什么调用@Value属性时我的属性为null

为什么在使用Spring AOP时属性值为null,但通过getter可以使用相同的值?

为什么在运行Modelsim Executable时Python子进程返回代码始终为0?

从属性文件读取时,为什么环境变量始终为null?

为什么使用admin时Firebase返回null

使用React.createRef时current始终为null

使用Kotlin时FXML控件始终为null

使用XPath查询XML时始终为null

使用AspNetCore.OData 7.2.1时GetRouteData始终为null

使用[FromForm]属性时,集合始终为null

使用Android Studio时,variable始终为null

为什么在使用ByRef时为变量分配“ .Value”?

为什么MVC HttpPostedFileBase始终为null?

为什么PrinterState始终为null?

为什么returnUrl值始终为null?

为什么在使用@Value注释时收到Null异常?

在Spring Boot中使用RestTemplate时long值始终为null

为什么当“ select unix_timestamp('')为null”返回null时,为什么“ select unix_timestamp('')为null”返回false?

使用此WSDL时,为什么我的SOAP请求始终为空?

当模拟Spring原型“ Repository”类时,Spock模拟返回null。为什么?

Spring AOP建议使用方法而不是@annotation:为什么?

从Angular执行$ http.put时,Spring MVC @ModelAttribute数据始终为null

在我的语句中使用布尔函数时返回始终为假

当我尝试使用Facebook或Google登录时,GetExternalLoginInfoAsync始终返回null

为什么Spring的FactoryBean getObject返回null?

Spring PropertySourcesPlaceholderConfigurer不对@Value使用自定义PropertySource