我正在构建一个spring boot应用程序。我想在外部配置我的数据库属性,所以任何人都可以从任何机器运行war文件。如何在外部配置application.properties?我正在关注此文档http://docs.spring.io/autorepo/docs/spring-boot/1.0.1.RELEASE/reference/html/boot-features-external-config.html
所以我在jetty的主目录中创建了一个app.properties文件。
<div class="filterPart">
<label>Search</label>
<input id="search" value="<?php echo $search; ?>" placeholder="Keyword" type="text" class="customfilters" />
</div>
<div class="filterPart lastLogin">
<label>Registration</label>
<input id="custom_registration_date1" readonly="readonly" value="<?php echo $registrationDateFrom; ?>" data-target-input="registration_date1" name="custom_registration_date1" placeholder="From">
<input id="custom_registration_date2" readonly="readonly" value="<?php echo $registrationDateTo; ?>" data-target-input="registration_date2" name="custom_registration_date2" placeholder="To">
</div>
尝试通过jetty运行war文件,但由于某种原因它没有检测到application.properties。
spring.datasource.url=jdbc:sqlserver://mymachine:1433;databasename=TESTDB
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.username=someuser
spring.datasource.password=somepass
当我在命令上面运行时,我在jetty中出现以下错误
java -jar ../start.jar --spring.config.location=file:///E:/Tools/jetty-distribution-9.3.12.v20160915/demo-base/webapps/app.properties
这是我的码头的目录结构
Caused by:
java.lang.IllegalArgumentException: Property 'driverClassName' must not be empty
at org.springframework.util.Assert.hasText(Assert.java:168)
at org.springframework.jdbc.datasource.DriverManagerDataSource.setDriverClassName(DriverManagerDataSource.java:1
24)
at com.abc.mycompany.sts.config.settings.PersistenceContext.dataSource(PersistenceContext.java:55)
at com.abc.mycompany.sts.config.settings.PersistenceContext$$EnhancerBySpringCGLIB$$368bb66a.CGLIB$dataSource$2
(<generated>)
at com.abc.mycompany.sts.config.settings.PersistenceContext$$EnhancerBySpringCGLIB$$368bb66a$$FastClassBySpring
CGLIB$$25ca0903.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(Configurati
onClassEnhancer.java:356)
at com.abc.mycompany.sts.config.settings.PersistenceContext$$EnhancerBySpringCGLIB$$368bb66a.dataSource(<genera
ted>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy
.java:162)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolv
er.java:588)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(Ab
stractAutowireCapableBeanFactory.java:1128)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutow
ireCapableBeanFactory.java:1022)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCap
ableBeanFactory.java:512)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapab
leBeanFactory.java:482)
在命令行上我通过转到demo-base并运行命令
来启动jettyE:\Tools\jetty-distribution-9.3.12.v20160915\demo-base\webapps
下面的bean看起来像我在尝试从外部application.properties文件访问属性
java -jar ../start.jar --spring.config.location=file:///E:/Tools/jetty-distribution-9.3.12.v20160915/demo-base/webapps/app.properties
这找不到我的app.properties文件。我错过了什么?
答案 0 :(得分:4)
我看到你使用env属性来初始化数据源,我会为你建议另一个解决方案。
命题一:可以在启动时设置属性值,如:
java -jar ../start.jar --spring.datasource.url=jdbc:sqlserver://mymachine:1433;databasename=TESTDB --spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver --spring.datasource.username=someuser --spring.datasource.password=somepass
或者,如果您需要掩码属性名称,请定义您自己的属性。您必须将application.properties
文件打包到jar:
spring.datasource.url=${APP_DB_URL}
spring.datasource.driver-class-name=${APP_DB_DRIVER_CLASS}
spring.datasource.username=${APP_DB_USERNAME}
spring.datasource.password=${APP_DB_PASSWORD}
下一步。在运行应用程序之前设置env属性。在* nix平台上:
export APP_DB_URL=jdbc:sqlserver://mymachine:1433;databasename=TESTDB
export APP_DB_DRIVER_CLASS=com.microsoft.sqlserver.jdbc.SQLServerDriver
export APP_DB_USERNAME=someuser
export APP_DB_PASSWORD=somepass
在Windows平台上:
set APP_DB_URL=jdbc:sqlserver://mymachine:1433;databasename=TESTDB
set APP_DB_DRIVER_CLASS=com.microsoft.sqlserver.jdbc.SQLServerDriver
set APP_DB_USERNAME=someuser
set APP_DB_PASSWORD=somepass
最后,只需运行你的罐子没有任何参数:
java ../start.jar
我希望这篇文章对你有所帮助。
答案 1 :(得分:3)
将您的application.properties文件放在JETTY_HOME/resources
文件夹下并添加
--module=resources
行到start.ini
文件。
第二个将资源文件夹添加到classpath,因此该目录下的每个文件都将位于webapp的类路径中。
这应该有用。
答案 2 :(得分:2)
--spring-config-location
不是正确的属性名称。该属性使用点符号,而不是连字符。
尝试:
--spring.config.location
有关详细信息,请参阅文档中的第24.3节:http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
此外,您应该指向application.properties所在的目录而不是特定文件。这可能会有所帮助,但是当您以后想要指定配置文件时更有用。然后,Spring Boot可以根据配置文件选择正确的属性文件。例如:
--spring.config.location=file:///E:/jetty/demo-base/webapps/
如果此目录中有多个文件,例如:
application.properties
application-dev.properties
application-prod.properties
您可以添加
--spring.profiles.active=prod
选择产品属性。</ p>
答案 3 :(得分:1)
&#34; file:&#34;之后,文件的路径中有太多斜杠。也应该使用协议和反斜杠:
- spring.config.location =文件:E:\工具\码头 - 分布 - 9.3.12.v20160915 \演示基\ web应用\ app.properties