我想要什么:
我想建立一个自动部署管道 - 我的计划如下:
我创建了两个.war
文件,让我们称之为prod.war
和test.war
,使用gradle构建脚本,并将它们部署到我的tomcat服务器。
我的问题:
prod.war
需要访问生产数据库(mongoprod
),test.war
需要访问测试数据库(mongotest
)。
我的尝试: 我以为我可以使用Spring配置文件,只需...
application-context.xml
中的一行:
<mongo:db-factory id="mongoDbFactory" dbname="mongoprod"/>
至:
<mongo:db-factory id="mongoDbFactory" dbname="${mongo.db.name}"/>
<filename>
:<content
>):
application-production.properties
:mongo.db.name=mongotest
application-test.properties
:mongo.db.name=mongoprod
production
或test
,然后使用相应的.property
文件插入所需的mongo dbname ...但这就是我运气不好的地方!
我试着把它添加到我的build.gradle
文件中:
bootRun { args = ["--spring.profiles.active=" + profiles] }
然后用$ ./gradlew bootRun -Ptest
运行它
但我得到错误:
Main class name has not been configured and it could not be resolved
除此之外我还没有使用过bootRun
,到目前为止只有一个war
任务来创建我的.war
文件:
war {
archiveName = 'application.war'
dependsOn 'lessc', 'webpack'
from "$buildDir/webapp"
exclude 'WEB-INF/js/main.js'
rename 'main\\.min\\.js', 'main.js'
}
有谁知道我怎么能让我的问题起作用或者能给我有用的信息吗?
您需要提供由bootRun
任务运行的主类名,例如,如下所示:
springBoot {
mainClassName = 'org.baeldung.DemoApplication'
}
你可以在这个qazxsw poi中阅读更多相关信息
更新:
应用程序插件的配置可以如下完成
tutorial
正如在application {
mainClassName = 'org.gradle.sample.Main'
}
所说的那样
我发现,对于我的情况来说,事实证明在运行时期间更容易(并且我认为更好),应该使用测试或生产数据库并且我通过以下方式解决它: 在我的plugin docs中,我创建了两个bean而不是一个,每个DB一个(我必须将它们嵌套在“root”-beans下面,否则我在构建期间会出错):
application-context.xml
为了使.war文件创建正常工作,我必须在我的build.gradle文件中将<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.5.xsd">
<beans profile="prod">
<mongo:db-factory id="mongoDbFactory" dbname="mongoprod"/>
<mongo:mapping-converter id="mongoConverter" base-package="my.company.project">
<mongo:custom-converters base-package="my.company.project"/>
</mongo:mapping-converter>
<mongo:gridFsTemplate bucket="images" converter-ref="mongoConverter" db-factory-ref="mongoDbFactory"/>
</beans>
<beans profile="test">
<mongo:db-factory id="mongoDbFactory" dbname="mongotest"/>
<mongo:mapping-converter id="mongoConverter" base-package="my.company.project">
<mongo:custom-converters base-package="my.company.project"/>
</mongo:mapping-converter>
<mongo:gridFsTemplate bucket="images" converter-ref="mongoConverter" db-factory-ref="mongoDbFactory"/>
</beans>
</beans>
设置为enabled
:
true
然后我创建了一个.war文件,复制它并重命名它 - 所以我有两个:war {
enabled = true //without this no .war file was created before - https://stackoverflow.com/a/52315049/4120196
dependsOn 'lessc', 'webpack'
from "$buildDir/webapp"
exclude 'WEB-INF/js/main.js'
rename 'main\\.min\\.js', 'main.js'
}
和prod.war
并将它们放入我的test.war
文件夹(我正在使用Win10,以防其他系统有所不同)。然后我创建了两个与.war文件同名的.xml文件,我在其中定义了弹簧配置文件,决定在Tomcat 8.5_Tomcat8.5.23\webapps
中使用哪个bean:
Tomcat 8.5_Tomcat8.5.23\conf\Catalina\localhost
prod.xml
<Context>
<Environment name="spring.profiles.active" value="prod" type="java.lang.String" override="false" />
</Context>
test.xml
我启动了tomcat,最后一切都按照我的意愿运行。
如果您有任何提示我的解决方案如何改进,请随时评论:) 我觉得我的application-context.xml可能会以某种方式缩短,例如......