標題自己說話,我有一個Config對象(從https://github.com/typesafehub/config),我想傳遞一個只支持java.util.Properties作爲參數的構造函數。 有沒有簡單的方法將配置轉換爲屬性對象?將Typesafe配置類型轉換爲java.util.Properties
7
A
回答
1
由於typesafe config
/hocon
支持比java.util.propeties
更豐富的結構,因此很難獲得安全的轉換。
或以其他方式發言,因爲properties
只能表示hocon
的子集,轉換不明確,因爲它會有可能的信息丟失。
因此,如果您的配置相當平坦,並且不包含utf-8
,那麼您可以將hocon
轉換爲json
,然後提取這些值。
更好的解決方案是實現一個ConfigClass
並使用來自hocon的值填充值並將其傳遞給想要配置的類。
5
這裏是一種將類型安全對象轉換爲對象的方法 java對象。我只在一個簡單的例子中測試過創建卡夫卡屬性。
鑑於application.conf此配置
kafka-topics {
my-topic {
zookeeper.connect = "localhost:2181",
group.id = "testgroup",
zookeeper.session.timeout.ms = "500",
zookeeper.sync.time.ms = "250",
auto.commit.interval.ms = "1000"
}
}
您可以創建相應的屬性對象那樣:
import com.typesafe.config.{Config, ConfigFactory}
import java.util.Properties
import kafka.consumer.ConsumerConfig
object Application extends App {
def propsFromConfig(config: Config): Properties = {
import scala.collection.JavaConversions._
val props = new Properties()
val map: Map[String, Object] = config.entrySet().map({ entry =>
entry.getKey -> entry.getValue.unwrapped()
})(collection.breakOut)
props.putAll(map)
props
}
val config = ConfigFactory.load()
val consumerConfig = {
val topicConfig = config.getConfig("kafka-topics.my-topic")
val props = propsFromConfig(topicConfig)
new ConsumerConfig(props)
}
// ...
}
功能propsFromConfig就是你主要感興趣中,並且關鍵點是使用entrySet to g et flatten list of properties,並且展開的條目值爲,這給出了一個Object取決於配置值的類型。
3
你可以試試我的Scala包裝https://github.com/andr83/scalaconfig。使用它將配置對象轉換爲java屬性很簡單:
val properties = config.as[Properties]
+2
這應該是Config imho的一部分 –
相關問題
- 1. 將Caffe配置轉換爲DeepLearning4J配置
- 2. 將VB轉換爲C#類型轉換
- 3. 將類型轉換爲myType
- 4. 將位類型轉換爲
- 5. 將類型轉換爲python
- 6. 將類型轉換爲拆箱類型
- 7. typesafe的配置是否支持自定義轉換器?
- 8. 將類型轉換爲可轉換類型的對/元組
- 9. 如何將通配符(?)轉換爲泛型類型T?
- 10. 將泛型類型轉換爲對象
- 11. 將域模型類型轉換爲ViewModels
- 12. xstream json:將java.util.Properties轉換爲對象文字
- 13. 無法將System.String轉換爲類類型
- 14. 將類類型對象轉換爲Intptr
- 15. 將context.request轉換爲類類型
- 16. 將類型轉換爲抽象類?
- 17. 如何將sqoop將sql數據類型轉換爲配置單元
- 18. 將類型轉換爲IDisposable - 爲什麼?
- 19. 將mysql配置轉換爲mysqli
- 20. 將Gradle配置轉換爲Ant路徑
- 21. 將Gradle Tomcat配置轉換爲Maven
- 22. 如何將Configslurper配置轉換爲Log4j?
- 23. 將配置文件轉換爲XML
- 24. 類型轉換爲基類
- 25. Android類型不匹配的幫助。將ArrayList轉換爲列表?
- 26. 類型不匹配:無法將void轉換爲Toast
- 27. 如何將類型爲Type的JArray轉換爲類型數組?
- 28. 無法將類型爲'System.Int32'的對象轉換爲類型'System.Web.Security.Cryptography.Purpose'
- 29. 將LinqToExcel.RowNoHeader類型轉換爲字符串
- 30. 將匿名類型轉換爲動態
是的,我知道這個數據模型不匹配。我希望Config或ConfigObject可能有一種「扁平化」的方法。實際上,我想從我的配置對象中配置一個Kafka使用者,並且Kafka使用者將一個Properties作爲參數;所以我或多或少地確定我的配置到消費者的部分不會被嵌套。 –