Mark Struberg created DELTASPIKE-1444:
-----------------------------------------
Summary: Create POJO and Recors based Config
Key: DELTASPIKE-1444
URL: https://issues.apache.org/jira/browse/DELTASPIKE-1444
Project: DeltaSpike
Issue Type: New Feature
Security Level: public (Regular issues)
Components: Configuration
Affects Versions: 1.9.5
Reporter: Mark Struberg
Assignee: Mark Struberg
Fix For: 1.9.6
Right now we only support Interface based configuration with the
{{@Configuration}} annotation. We could also support injecting POJOs directly
and even Java14 Records.
E.g. a class
{code}
public record Endpoint(String host, Integer port, String path){}
{code}
or with a parameter ct:
{code}
public class Endpoint {
private final String host;
...
public Endpoint(
@ConfigProperty(name="host") String host,
@ConfigProperty(name="port") Integer port,
@ConfigProperty(name="path") String path){
this.host = host;
....
}
}
{code}
Note that the {{@ConfigProperty}} annotation might get omitted if the class
gets compiled with the {{javac -parameters}} option.
or with a default ct and field parameters:
{code}
public class Endpoint {
private String host;
private Integer port;
private String path;
...
}
{code}
Resolving of all the required properties must be performed atomically.
The solution might either be done via the built-in algorithms as shown above,
in which case the following call might be used to denote that a bean should get
resolved which consists of mulitple attributes:
{code}
ServerEndpointPojoWithCt someServer =
ConfigResolver.resolve("myapp.some.server")
.asBean(ServerEndpointPojoWithCt.class)
.getValue();
{code}
or via an explicit Converter function:
{code}
final ServerEndpointPojoWithCt someServer =
ConfigResolver.resolve("myapp.some.server")
.asBean(ServerEndpointPojoWithCt.class, (cfg, key) -> new
ServerEndpointPojoWithCt(
cfg.resolve(key + ".host").getValue(),
cfg.resolve(key + ".port").as(Integer.class).getValue(),
cfg.resolve(key + ".path").getValue());)
.getValue();
{code}
--
This message was sent by Atlassian Jira
(v8.20.1#820001)