lightbend / config Goto Github PK
View Code? Open in Web Editor NEWconfiguration library for JVM languages using HOCON files
Home Page: https://lightbend.github.io/config/
configuration library for JVM languages using HOCON files
Home Page: https://lightbend.github.io/config/
Is there a way to access an array element directly?
example:
arr [
{ip= 192.168.7.1, name="Server 1"},
{ip= 192.168.7.2, name="Server 2"},
{ip= 192.168.7.3, name="Server 3"}
]
As far as I understand the library I first have to access the array by calling config.getObjectList("arr") and then iterating over the list to access the fields of my objects.
I'd like to have the possibility of calling config.getString("arr[0].ip") or something like that...
Thanks.
I just did a little edit of HOCON.md for pull 32
what struck me it is a classic tl;dr masterpeace
I suggest to provide hocon for dummies which would be
just a collection of small hocon config snippets, with minimal comments,
of increasing complexity, so people can pick up and use hocon patterns,
w/o much technical understanding of details
this is a feature request
use case:
the way I understand current mechanisms of HOCON
https://github.com/typesafehub/config/blob/master/HOCON.md
this would make this definition very verbose;
how about new/proposed object$builder
syntax:
//
// the list definition below will be looking for this builder
//
netty_point_list$builder {
id = "you-must-override"
localAddress = "1.2.3.4:12345"
remoteAddress = "you-must-override"
packetTTL = 5
pipeline = "default-pipeline"
pipeline_param_0 = 123
// 20 more parameters here; mostly come from include or variable substitution
}
//
// netty_point_list will be looking for optional netty_point_list$builder
// to initialize default list items parameters before override
//
netty_point_list [
{ id = "service-1", remoteAddress = "1.1.1.1:12345", pipeline = "advanced" }
{ id = "service-2", remoteAddress = "1.1.1.2:12345", localAddress = "3.3.3.3:12345" }
// 100 more service definitions with little variations on the builder-defined parameters
]
Hi,
I can use config.root.render(ConfigRenderOptions.concise.setFormatted(true)) for dumping my Config to JSON format, but that would be really great to be able to dump in to HOCON format.
I'm very fond of this lib, and I'd like to use it, not only for read-only config, but also for read-write preferences that are dumped on the filesystem.
Cheers,
Stéphane
if we have a client report a ConfigException we get a message instead:
cannot serialize: com.typesafe.config.ConfigException$WrongType: system properties: user has type OBJECT rather than STRING))) due to java.io.NotSerializableException: com.typesafe.config.impl.SimpleConfigOrigin
seems trivial to add "implements Serializable" to either the ConfigOrigin interface or the SimpleConfigOrigin class
our ref: PERF-463
Having some strategy to store encrypted passwords would be nice.
hello;
this is a feature request;
currently, include url()/file()/classpath()
https://github.com/typesafehub/config/blob/master/HOCON.md#includes
are either relative or absolute, to the specific url:
"otherwise, a file or other resource "adjacent to" the one being parsed"
I suggest to introduce a concept of a "base()" stanza:
include base("common/server/instance/settings.conf")
witch represents an idea: include form a root of "common configuration store",
and is agnostic of url()/file()/classpath() distinctions;
"configuration store" would have to be a new concept for typesafe.config;
base() url handler would have to be provided to the typesafe.config library
in some external way
another alternative would be to rely on new custom "config://" protocol handler
explicitly, such as, in this stanza:
include url("config://common/server/instance/settings.conf")
an example of custom url approach can be found here:
https://github.com/barchart/barchart-config/tree/master/barchart-conf-base
https://github.com/barchart/barchart-config/blob/master/barchart-conf-base/src/main/java/com/barchart/conf/impl/ConfigHandlerProvider.java
the benefit of "include base()" in typesafe.config would be to standardize
the "configuration store" approach to configuration management;
thank you.
Right now to load the reference config, etc. we use getClassLoader on a class from com.typesafe.config
But for example Play is trying to do this:
private val initialConfiguration = Threads.withContextClassLoader(classloader) {
Configuration.load(path, mode)
}
And because Play apps have their own class loader, the reference.conf for the app dependencies will not be found.
The config library should use the context class loader by default rather than ConfigImpl.class.getClassLoader.
Thanks for writing this library and for documenting it so well. It is great and is helping us manage our config files better.
I'm using it in a system which centralizes the configuration of various other services. We need to send com.typesafe.config,Config objects over the wire to other services. What I'd like to do is the following:
So, my question is, given a config object, is there a simple way to get to its string representation?
Hi guys,
I'd like to configure protobuf to be the default serialization for my messages.
Here what I do in attempt to make it happen:
import akka.actor._
import akka.pattern.ask
import akka.serialization._
import akka.util._
import play.api._
import play.libs.Akka
import akka.util.Timeout
object Engine {
implicit val timeout = Timeout(1 second)
val ngin = Akka.system.actorOf(Props[Engine])
}
class Engine extends Actor {
val ser = SerializationExtension(context.system)
override def preStart() = {
println("Got %s serializer for %s"
.format(ser.findSerializerFor(classOf[java.lang.String]).getClass().getName(),
classOf[java.lang.String].getName()))
}
def receive = { ... }
}
While my application.conf file contains the following section:
play { akka { actor {
serializers { proto = "akka.serialization.ProtobufSerializer" }
serialization-bindings { "java.io.Serializable" = proto
"java.lang.String" = proto }
} } }
Though I always get JavaSerializer: "Got
akka.serialization.JavaSerializer serializer for java.lang.String"
What am I doing wrong?!
-Matthew
The README proposes extending the string value concatenation to arrays and objects. So
${foo} "hello"
concats ${foo}'s value with "hello", with arrays
${foo} [1,2,3]
prepends ${foo} to the array, and with objects it would merge the two, so
${foo} { name = "east" }
would merge { name = "east" } into ${foo}
This would among other things give a nicer syntax when "inheriting", before:
data-center-east = ${data-center-generic}
data-center-east = { name = "east" }
after:
data-center-east = ${data-center-generic} { name = "east " }
also, if substitutions are allowed to refer to the previous value of the field being defined, you could use this to extend paths.
path = [somethingBefore] ${path} [somethingAfter]
For more bonus points, support +=:
path += somethingAfter
equivalent to
path = ${path} [somethingAfter]
When I have an external config file on my Linux box which has an include classpath('application') everything works as expected, but when I run the same program on a Windows 7 machine, I get a flurry of exceptions saying that I can't use an unquoted string in the include statement. Any thoughts?
this is a feature request;
currently, the pattern like this is hard to avoid:
if (config.hasPath("master")) {
return config.getBoolean("master");
} else {
return false;
}
it would help to have conviniece getXXX() with default, such as:
return config.getBoolean("master", false);
Now the com.typesafe.config.impl package is defined as private, which prevents akka 2.0 from working in remote scenarios with remote deployment. The reason for this is that the com.typesafe.config.impl.SerializedConfigValue
class is not available for the akka.remote.MessageSerializer
:
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:622)
at akka.util.ClassLoaderObjectInputStream.resolveClass(ClassLoaderObjectInputStream.scala:12)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1593)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at akka.serialization.JavaSerializer$$anonfun$1.apply(Serializer.scala:121)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57)
at akka.serialization.JavaSerializer.fromBinary(Serializer.scala:121)
at akka.serialization.Serialization.deserialize(Serialization.scala:73)
at akka.remote.MessageSerializer$.deserialize(MessageSerializer.scala:22)
at akka.remote.RemoteMessage.payload(RemoteTransport.scala:212)
at akka.remote.RemoteMarshallingOps$class.receiveMessage(RemoteTransport.scala:274)
at akka.remote.netty.NettyRemoteTransport.receiveMessage(NettyRemoteSupport.scala:46)
at akka.remote.netty.RemoteServerHandler.messageReceived(Server.scala:182)
at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:75)
at akka.remote.netty.RemoteServerHandler.handleUpstream(Server.scala:154)
at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:372)
at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:534)
at org.jboss.netty.handler.execution.ChannelUpstreamEventRunnable.doRun(ChannelUpstreamEventRunnable.java:45)
at org.jboss.netty.handler.execution.ChannelEventRunnable.run(ChannelEventRunnable.java:69)
at org.jboss.netty.handler.execution.OrderedMemoryAwareThreadPoolExecutor$ChildExecutor.run(OrderedMemoryAwareThreadPoolExecutor.java:315)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Thanks for looking into this!
I have my settings defined outside of the broad application.conf settings.
val myConfig = System.getProperty("my.config")
val config = ConfigFactory.load(myConfig)
But I can only load these files if they're defined in the classpath. I want the option to load a configuration using loadFile or loadURL. I can't do it from the command line either, as config.url and config.file only work with application.conf.
Am using Play 1.2.x where my application.conf has a key (jvm.memory) with the following value
jvm.memory=-Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=256M
Got a Parse exception ConfigFactory.load(), the message is as follows -
A com.typesafe.config.ConfigException$Parse has been caught, application.conf: 64: Invalid number: '-' (if you intended '-' to be part of the value for 'jvm.memory', try enclosing the value in double quotes, or you may be able to rename the file .properties rather than .conf)
Any workaround? Play does not like when I try enclosing the value with double quotes.
Given the following:
repositories {
AWS S3 : "http://jets3t.s3.amazonaws.com/maven2"
}
The key is parsed as ""AWS S3"" instead of "AWS S3", which is what I expected from reading the README.
I would propose to extend the HOCON syntax to simplify declaration of an array of objects.
Currently it is possible to declare an array of primitive types or objects like the following:
[ 3, 6, 9 ]
[ alpha, beta, delta ]
[
{ a : 42, c : 5 }
{ b : 43, c : 6 }
]
But take in consideration the declaration of a list of assignments, for example: alpha = 1, beta = 2, delta = 3. Currently it is required the following definition:
[ { alpha = 1 } , { beta = 2 }, { delta = 3 } ]
It is much nicer if it would be possible to use the following syntax
[ alpha = 1, beta = 2, delta = 3 ]
The benefit is more evident for more complex declaration like this
[ alpha = { a:1 }, beta = { b: 2 }, delta = { c: 3, d: 4 ) ]
instead of
[ { alpha = { a:1 } }, { beta = { b: 2 } }, { delta = { c: 3, d: 4 } } ]
The underlying would not change but the syntax would be much more readable in the spirit of the project.
Thanks
this is a feature request;
I suggest to incorporate into typesafe.config ability to import(also export) external xml config files
sample implementation:
https://github.com/barchart/barchart-config/blob/master/barchart-conf-util/src/main/java/com/barchart/conf/util/ConfigXML.java
sample xml source:
https://github.com/barchart/barchart-config/blob/master/barchart-conf-util/src/test/resources/reference/hazelcast-fullconfig.xml
sample typesafe.config result:
https://github.com/barchart/barchart-config/blob/master/barchart-conf-util/src/test/resources/reference/hazelcast-fullconfig.conf
basic idea is to overload symbol "/" with semantics : "reference to xml node attribute or parent node value"
If you try to append arrays using the shorthand syntax +=
as described in README.md, you get the following exception:
Reserved character '+' is not allowed outside quotes (if you intended '+' to be part
of a key or string value, try enclosing the key or value in double quotes)
the bible says:
https://github.com/typesafehub/config/blob/master/HOCON.md#include-syntax
"Value concatenation is NOT performed on the "argument" to include or url() etc. The argument must be a single quoted string. No substitutions are allowed, and the argument may not be an unquoted string or any other kind of value."
then what is the solution for this requirement:
include file("${user.home}/.service/secret.properties") ?
the following produces ConfigException.UnresolvedSubstitution;
I went through HOCON.md again, still have no answer; what am I missing, please?
{
test = [
{
some-id = 123
more-id = ${some-id}
}
{
some-id = 456
more-id = ${some-id}
}
]
}
HOCON.md says the following about substitutions:
Substitution processing is performed as the last parsing step, so a substitution can look forward in the configuration. If a configuration consists of multiple files, it may even end up retrieving a value from another file.
If a key has been specified more than once, the substitution will always evaluate to its latest-assigned value (that is, it will evaluate to the merged object, or the last non-object value that was set, in the entire document being parsed including all included files).
My reference.conf contains:
foo = hello/${bar}
bar = world
My application.conf contains:
bar=mother
What should the output of the following code be after loading the configuration:
System.out.println(config.getString("foo"));
System.out.println(config.getString("bar"));
I would expect "hello/mother" and "mother". Instead, I see "hello/world" and "mother". Did I misunderstand what the spec says about substitutions being evaluated as a last step or is there a bug here?
Hi,
I'm attempting to load a default application config while running my project in Scala IDE. Everything works great if I run the application via sbt at the CLI, but when I try to start my application in Scala IDE using the Scala Application loader it's unable to find the configuration file.
I've placed my application configuration file in my project at the following path.
/src/main/resources/application.conf
My calling code is simply ConfigFactory.load().getString("bar") from my main method and I get the following stack trace.
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.foo.dataservices.MyServer.main(MyServer.scala)
Caused by: com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'bar'
at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:115)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:138)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:150)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:155)
at com.typesafe.config.impl.SimpleConfig.getConfigNumber(SimpleConfig.java:170)
at com.typesafe.config.impl.SimpleConfig.getInt(SimpleConfig.java:181)
Any help would be appreciated.
There is a getMilliseconds and getNanoseconds API, but no getSeconds API. Seems like this would be useful for many people and trivial to add.
I know the documentation explicitly says that "multi-line unquoted strings using backslash to continue the line are not allowed". But, unless there is a good reason for not supporting it, this would be a very convenient feature.
It's very typesafe if it's possible to convert:
person {
name = Jack
age = 20
}
to an object of:
case class Person(name: String, age: Int, phone: Option[String])
can you please carry in the library this little thingy (or, better, non-static)?
private static final ConfigRenderOptions FORMAT = ConfigRenderOptions
.concise().setFormatted(true);
public static String toStringJSON(final Config config) {
return toStringJSON(config.root());
}
public static String toStringJSON(final ConfigObject object) {
return object.render(FORMAT);
}
thanks.
please build as a bundle so it can be used in osgi w/o need to wrap or convert
Using JBossObjectOutputStream and JBossObjectInputStream results in an EOFException.
The main problem is that trying to call an EJB3-method on a bean in another EAR on a jboss server (jboss as 5.1) results in an IOException:
at org.jboss.aop.joinpoint.ConstructionInvocation.invokeNext(ConstructionInvocation.java:79)
at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67)
at org.jboss.aop.joinpoint.ConstructionInvocation.invokeNext(ConstructionInvocation.java:79)
at org.jboss.ejb3.EJBContainer.invokeCallback(EJBContainer.java:1119)
... 66 more
Caused by: java.io.IOException: field code 0 is not supposed to be on the wire
at com.typesafe.config.impl.SerializedConfigValue.readCode(SerializedConfigValue.java:414)
at com.typesafe.config.impl.SerializedConfigValue.readOrigin(SerializedConfigValue.java:218)
at com.typesafe.config.impl.SerializedConfigValue.readValue(SerializedConfigValue.java:392)
at com.typesafe.config.impl.SerializedConfigValue.readExternal(SerializedConfigValue.java:453)
at org.jboss.serial.persister.ExternalizePersister.readData(ExternalizePersister.java:72)
at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:412)
at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:82)
at org.jboss.serial.objectmetamodel.DataContainer$DataContainerInput.readObject(DataContainer.java:845)
at org.jboss.serial.io.MarshalledObjectForLocalCalls.get(MarshalledObjectForLocalCalls.java:60)
at org.jboss.ejb3.remoting.IsLocalInterceptor.invokeLocal(IsLocalInterceptor.java:101)
at org.jboss.ejb3.remoting.ClusteredIsLocalInterceptor.invoke(ClusteredIsLocalInterceptor.java:52)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:62)
at $Proxy1483.invoke(Unknown Source)
at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:207)
at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:164)
... 80 more
Unfortunately I haven't been able to figure out exactly why the exception occurs.
Using a newer version of jboss-serialization is no solution...
I would like to use this library in a couple open source projects. Unfortunately, maven being what it is, if someone uses my library as a dependency, and my library depends on this one, then the transitive dependency fails because my users don't have your maven repo configured. The easiest way to resolve this is to push artifacts from this library into maven central.
Yes, this is a maven design flaw, but supporting existing maven stuff is a feature worth supporting.
just an after thought:
based on the little experience with pull 32
I can say its a bit hard to understand which parts of hocon gramma
are processed by what and if that processing is complete / non contradictory
I wish you would migrate that part of the library to antlr
or javacc by the time of 2.0.0 :-)
This is a very simple use case: A list of common steps (configuration for scheduling, processing order etc.) with inter-dependent order is configured using namespaced keys, like this:
tasks.prepare.args="collect,store"
tasks.process.args="count"
tasks.cleanup.args="deleteTemps"
Expected: When iterating the keys under tasks
, the order is [prepare, process, cleanup]
.
Actual: Dependent on JDK's HashMap implementation.
The simplest fix for this would be to use LinkedHashMap instead. As a workaround I now need to add a number as additional key to each task and then sort afterwards the objects created based on the configuration using that number to get them into order I want to.
One of the contracts of checkValid is "All paths found in the reference config must be present in this config or an exception will be thrown."
IMO the converse is also very useful: "If a path is found in this config that is NOT present in the reference config, an exception will be thrown".
Use cases:
hello;
I am considering delivering of configuration changes
in a form of com.typesafe.config.Config based events;
this would need some form of
typesafe.config.Diff(old,new) -> diff
what would be the fast, low heap, and "right"
way to do this config diff?
can this be generic enough to warrant inclusion
in the typesafe.config library?
thanks.
From the Javadoc of ConfigFactory.systemProperties:
"Because this returns a singleton, it will not notice changes to system properties made after the first time this method is called"
While this makes sense, I'm running into a problem where a hook to force refresh of system properties would help. Specifically, I'm building a Config object via Guice-injection, which is then used to populate a "settings" object (as suggested in the README). For unit tests, we construct a new settings object per test so we can specify different settings for each test.
Unfortunately, because of the above behavior of systemProperties (and hence, defaultOverrides and load), any test that modifies system properties can have unintended side effects on subsequent tests.
A nice feature would be to parse commandline parameters. E.g.
-db.user=muki -db.password=secret
public static void main(String[] args) {
Config c = ConfigFactory.parseArray(args).getConfig("db");
c.getString("user");
c.getString("password");
}
If there is any interest, I would try to provide an implementation.
I cannot build this snapshot due to this error:
unresolved dependency: de.johoop#jacoco4sbt;1.2.2
I changed the sbt version from 0.11.2 to 0.11.3, but
this shouldn't caused this problem?
Furthermore I tried
addSbtPlugin("de.johoop" % "jacoco4sbt" % "1.2.3")
Which can be resolved but leads to an ClassNotFound exception
I have seen it multiple times on the akka mailing list that a “bug” was ultimately due to getting the nesting of a setting wrong. Since .config is schemaless for good reasons, there is a priori not much we can do about it, but what about an override signal?
akka {
debug {
receive := on
}
}
This should fail at merge time, telling the user that the setting does not actually override anything (which akka.actor.debug.receive would, from reference.conf). This would allow users to still put whatever they want into the config, while asserting that some of the settings are actually understood by the library which uses them.
Currently, there is no easy way to get a new Config or ConfigObject with the content on a certain branch replaced (with fallback to original, of course).
a {
b {
c = 10
d = 7
}
}
b1 {
c = 11
}
I want to get a config that looks like
a {
b {
c = 11
d = 7
}
}
(notice the fallback mechanism)
The only way (I found) to do this now is:
ConfigFactory.parseMap(Map("a" -> Map("b" -> config.getObject("b1").unwrapped)).asJava).withFallback(config)
I think this is a common need so it would be nice to have better syntax, something like:
config.merge("a.b",config.getConfig("b1"))
On just one not-yet-reproduced occasion, this test failed:
[error] Test com.typesafe.config.impl.PublicApiTest.cachedReferenceConfig failed: defaultReference(loader) was cached
cache.getOrElseUpdate is synchronized, it isn't clear to me what could be wrong.
Am using Play 1.2.x. I need to declare a long list of JPA entities, however Config does not like it. Below is an example
jpa.entities=com.googlecode.sarasvati.hib.HibArc, com.googlecode.sarasvati.hib.HibArcToken
Below is the Parse exception
A com.typesafe.config.ConfigException$Parse has been caught, application.conf: 147: Key 'com.googlecode.sarasvati.hib.HibArcToken' may not be followed by token: ',' (if you intended ',' to be part of the value for 'com.googlecode.sarasvati.hib.HibArcToken', try enclosing the value in double quotes)
the following little test
https://github.com/barchart/barchart-inst/blob/master/barchart-inst-store-sql/src/test/java/typesafe/TestCheckValid.java
@Test
public void test() {
//
final Config reference = ConfigFactory.defaultReference();
final Config memberONE = reference.getConfig("member-config");
log.debug("memberONE : {}", memberONE);
/** good config - should pass */
memberONE.checkValid(reference, "member-config");
memberONE.getBoolean("is-master");
//
final String configWithTypeError = "{ is-master = 42 }";
final Config memberTWO = ConfigFactory.parseString(configWithTypeError)
.withFallback(memberONE);
log.debug("memberTWO : {}", memberTWO);
/** sick config - should fail */
memberTWO.checkValid(reference, "member-config");
memberTWO.getBoolean("is-master");
assertTrue(true);
}
and a reference
https://github.com/barchart/barchart-inst/blob/master/barchart-inst-store-sql/src/main/resources/reference.conf
member-config {
is-master = false
name = unknown
batch-size = 100
}
fails self-check here
/** good config - should pass */
memberONE.checkValid(reference, "member-config");
with a trace:
com.typesafe.config.ConfigException$ValidationFailed: reference.conf: 2: member-config: No setting at 'member-config', expecting: object with keys [batch-size, is-master, name]
at com.typesafe.config.impl.SimpleConfig.checkValid(SimpleConfig.java:833)
at typesafe.TestCheckValid.test(TestCheckValid.java:28)
what am I missing ?
Hi,I use
val conf = ConfigFactory.load("cmds", ConfigParseOptions.defaults().setSyntax(ConfigSyntax.PROPERTIES),ConfigResolveOptions.noSystem())
"cmds" is properties file.
awt.toolkit
os.version
java.vendor.url.bug
java.awt.graphicsenv
java.home
line.separator
java.vm.version
java.vm.specification.name
sun.management.compiler
java.vm.info
I think only load myself properties,don't need systemProperties,So what am I, what am I to do?
Thanks!
This library can be used not only for the configuration, but also for many other purposes. But you support extension ".conf" only when activated HOCON by default. I think the extension ".hocon" is necessary for load by default in HOCON format.
Config interface should allow for default values to be defined in code such that if not present in config file the value defined in code can be picked up.
val a = config. getInt("a.b.c",10) //If a.b.c is not defined 10 will be applied.
Hi,
is there any plan to implement the missing parsing option in the com.typesafe.impl.Parser below?
if (kind.equals("url(")) {
} else if (kind.equals("file(")) {
} else if (kind.equals("classpath(")) {
} else {
throw parseError("expecting include parameter to be quoted filename, file(), classpath(), or url(). No spaces are allowed before the open paren. Not expecting: "
+ t);
}
or was there a specific reason why it was not implemented? This would be really useful when running play2.0 apps where we would only like some of the configuration options in the binary exposed. Right now includes will resolve to the base of the original URL with no option to include from another source.
I am more than happy to try and add this myself, just trying to find out the rationale for not implementing it initially.
Thanks
I tried to ${user.home}
in my project, but got a ConfigException$UnresolvedSubstitution
error, however, it's ok to use something like ${HOME}
assertNotNull(System.getProperty("user.home"));
String conf = "foo: bar, home: ${HOME}, myHome: ${user.home}";
Config cfg = ConfigFactory.parseReader(new StringReader(conf));
assertEquals("bar", cfg.getString("foo"));
assertFalse(cfg.resolve().getString("home").contains("$")); // works
assertFalse(cfg.resolve().getString("myHome").contains("$")); // failed
Currently have to recompile my own version; unless there are any J2SE 6 specific features (pretty rare) it would be good if the lib shipped at 1.5 as standard.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.