生成具有预定义的数据源属性而无法部署的Spring Boot WAR文件

时间:2018-08-05 23:37:45

标签: java spring hibernate maven spring-boot

#TODO Change the datasource url along with the username and password
spring.datasource.url=jdbc:mysql://localhost:3306/db_example?autoReconnect=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=[my password here]
spring.datasource.driver-class-name=com.mysql.jdbc.Driver


#TODO Change hibernate initialization-type before select executions of the applications

spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
spring.jpa.show-sql=true


spring.session.jdbc.table-name=spring_session

上面是我现有的application.properties文件。这是我在开发计算机上编写应用程序并使用它来毫无问题地连接到计算机的MySQL服务器时使用的文件。

不幸的是,当我想更改这些datasource参数以表示我的Tomcat Server @DigitalOcean上的数据库凭证时,它会在尝试连接到我的机器的MySQL服务器时停止构建WAR文件。这些新的(当然是不正确的)凭据。

在这种情况下我该怎么办?有没有一种方法可以提供两组数据源参数,而又不强迫它们一次被访问(更清楚地说,允许应用程序随时连接到它可以访问的任何位置)?

此外,假设此问题可以解决,请将localhost:8080或localhost作为在Digital Ocean上的Tomcat上部署时尝试连接到MySQL服务器的正确URL。我知道这是一个不同的问题,但它没有上一个问题那么麻烦。

谢谢您能给我的帮助。

2 个答案:

答案 0 :(得分:0)

您需要设置弹簧轮廓。可以使用yaml private bool IsUserInCc(string cc, string username) { var ccList = cc.Split(';'); if (ccList.Contains(username)) return true; return LDAPUtility.Instance.IsUserInGroup(ccList.ToList(), username); } 文件(而不是application.yml文件)作为属性来完成此操作。请查看https://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html#howto-change-configuration-depending-on-the-environmenthttp://www.baeldung.com/spring-yaml了解更多详细信息。

如下所述在yml文件中定义属性

application.properties

然后,当您在本地环境中构建时,它将尝试连接默认属性(您需要在其中指定本地环境的凭据/属性)。当您需要使用Digital Ocean上的信誉进行部署时,请使用server: port: 9000 datasource: url: jdbc:mysql://localhost:3306/db_example?autoReconnect=true&useSSL=false username: root password: [your password] --- spring: profiles: production datasource: url: jdbc:mysql://[IP address or hostname]:3306/db_example?autoReconnect=true&useSSL=false username: [required username] password: [required password] server: port: 9002 个人资料来部署您的应用。

答案 1 :(得分:0)

我建议使用JNDI在tomcat上进行部署。如果要同时支持tomcat和tomcat,我将使用两个不同的application.properties:

application-standalone.properties

spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/my-application
spring.datasource.username=postgres
spring.datasource.password=password

用于在 tomcat 上进行部署:

application-tomcat.properties

spring.datasource.jndi-name=java:comp/env/jdbc/my-application

context.xml

<Context>
    <ResourceLink auth="Container" name="jdbc/my-application" global="jdbc/my-application" type="javax.sql.DataSource" />
</Context>

server.xml

<GlobalNamingResources>

    <Resource auth="Container" driverClassName="org.postgresql.Driver"
          maxActive="20"
          maxIdle="0"
          maxWait="10000"
          name="jdbc/my-application"
          password="password"
          username="postgres"
          type="javax.sql.DataSource"
          url="jdbc:postgresql://127.0.0.1:5432/my-application"/>

</GlobalNamingResources>

因此,您将秘密保存在服务器上。