我需要指定一些由点分隔的配置参数。连接池位于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
我希望使用引号应该会有所帮助,但它并不像池配置实现中的错误。请指教。
答案 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
我认为trustStoreType
和keyStoreType
不是必需的,我总是使用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组件。