播放2.4 HikariCP连接池配置

时间:2015-06-26 22:24:23

标签: java ssl playframework typesafe-config

我需要指定一些由点分隔的配置参数。连接池位于Play 2.4应用程序中。例如

db {
  default {
    driver = ${?DB_DRIVER}
    url = ${?DB_URL}
    username = ${?DB_USER}
    password = ${?DB_PASSWORD}
    hikaricp {
      dataSource {
        "javax.net.ssl.trustStore" = ${?DB_TRUST_STORE}
        "javax.net.ssl.trustStoreType" = "JKS"
        "javax.net.ssl.trustStorePassword" = ${?DB_TRUST_STORE_PASSWORD}
        "javax.net.ssl.keyStore" = ${?DB_KEY_STORE}
        "javax.net.ssl.keyStoreType" = "JKS"
        "javax.net.ssl.keyStorePassword" = ${?DB_KEY_STORE_PASSWORD}
      }
    }
}

所有参数如" javax.net.ssl。"用于提供有关连接的SSL证书的详细信息。看起来Play框架正在尝试解析配置密钥,例如" javax.net.ssl。"并用点分开它们。所以它失败了,例外

Caused by: com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'javax'

我在这里找到了一个类似的主题:How do I get an unwrapped key in Typesafe Config? 根据第一反应

foo {
   bar {
       baz = 10
   }
}

相同
foo.bar.baz = 10

但如果写成"foo.bar.baz" = 10

,情况会有所不同

我希望使用引号应该会有所帮助,但它并不像池配置实现中的错误。请指教。

2 个答案:

答案 0 :(得分:1)

我回答完整的@brettw回答。

运行play exec时,必须将这些参数添加为JVM属性:

/path/to/bin/<project-name>
  -Djavax.net.ssl.keyStore=/mysql-credentials/keystore \
  -Djavax.net.ssl.keyStorePassword=YYYYYY \
  -Djavax.net.ssl.trustStore=/mysql-credentials/truststore \
  -Djavax.net.ssl.trustStorePassword=XXXXXX \
  ...

对于那些想知道如何创建这些商店的人:read this

我认为trustStoreTypekeyStoreType不是必需的,我总是使用JKS类型。

请记住,您还必须告诉jdbc使用SSL:

-Dslick.dbs.default.db.url=jdbc:mysql://DOMAIN_OR_IP/DATABASE?verifyServerCertificate=false&useSSL=true&requireSSL=true

最后但并非最不重要的是,您可以通过以下方式调试握手:

-Djavax.net.debug=all

它为您提供了很多(MB)关于在stdout上打印的握手,重新联合和密码的信息

答案 1 :(得分:0)

这些通常是JVM属性,我不知道将它们放入db / dataSource配置是否合适。即使是使用它们的驱动程序,它们也是系统范围的属性,并且适用于所有SSL组件。

相关问题