我想在我的项目中使用typesafe配置(HOCON配置文件),这有助于简化和组织应用程序配置.目前我正在使用普通的Java属性文件(application.properties),这在大项目中很难处理.
我的项目是Spring MVC(不是Spring启动项目).有没有办法支持我的Spring环境(我将注入到我的服务中)以支持typesafe配置.哪个不应该制动我现有的环境用法像@Value
注释@Autowired Environment
等.
如何以最小的努力和我的代码更改来做到这一点.
这是我目前的解决方案:寻找还有其他更好的方法
@Configuration
public class PropertyLoader{
private static Logger logger = LoggerFactory.getLogger(PropertyLoader.class);
@Bean
@Autowired
public static PropertySourcesPlaceholderConfigurer properties(Environment env) {
PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer();
Config conf = ConfigFactory.load();
conf.resolve();
TypesafePropertySource propertySource = new TypesafePropertySource("hoconSource", conf);
ConfigurableEnvironment environment = (StandardEnvironment)env;
MutablePropertySources propertySources = environment.getPropertySources();
propertySources.addLast(propertySource);
pspc.setPropertySources(propertySources);
return pspc;
}
}
class TypesafePropertySource extends PropertySource<Config>{
public TypesafePropertySource(String name, Config source) {
super(name, source);
}
@Override
public Object getProperty(String name) {
return this.getSource().getAnyRef(name);
} …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将AWS Managed ElasticSearch用于我的项目.
我已经关注了https://aws.amazon.com/blogs/aws/new-amazon-elasticsearch-service/,我可以启动一个实例并且成功了.但我无法使用elasticsearch传输客户端从我的服务连接到同一个实例.
我知道传输客户端应该连接到9300端口,而该端口我无法通过aws控制台打开.
这是我用来连接的代码,它可以成功连接到我在9300端口上的ec2机器上的弹性搜索设置.
ImmutableSettings.Builder settings = ImmutableSettings.settingsBuilder();
settings.put("cluster.name", "my-cluster-name")
.put("client.transport.nodes_sampler_interval", "15s")
.put("client.transport.ping_timeout", "15s")
.put("client.transport.sniff", true)
.put("client.transport.ignore_cluster_name", false).build();
client = new TransportClient(settings)
.addTransportAddress(
new InetSocketTransportAddress(
env.getProperty("elastic-host-url-provided-by-aws",80)
));
Run Code Online (Sandbox Code Playgroud)
我得到了例外
org.elasticsearch.client.transport.NoNodeAvailableException:没有配置的节点可用:[]位于org.elasticsearch.client.transport.TransportClientNodesService的org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:305).在org.elasticsearch.client.support.AbstractClient.index(AbstractClient.java:98)的org.elasticsearch.client.transport.support.InternalTransportClient.execute(InternalTransportClient.java:106)执行(TransportClientNodesService.java:200)
我怀疑这个错误是因为我通过HTTP端口连接TransportClient.但我不知道aws托管弹性搜索实例的TCP端口是什么.我搜索了aws文件,但我找不到任何文件.如果有人使用TransportClient连接Amazon ES,请告诉我.
注意:我已经验证我使用的elasticsearch java jar版本与服务器相同.从我的系统我可以访问Kibana和ES HTTP PORTS没有任何问题.
在HOCON和Typesafe配置中,如何在替换时设置默认值.
它支持这样的东西?
${server.host: 'localhost'}
- >如果设置了server.host(在相同的配置文件中或通过环境设置),则替换为如果未设置,则选择默认值
有没有办法在不使用 spring boot 的情况下在普通 spring web mvc 应用程序中启用 yaml 配置(而不是属性文件)并支持 @Value 注释。
我搜索了很多,到处都使用弹簧靴。我对使用 spring boot 不感兴趣,因为它非常重,并且为自动设置配置了许多依赖项。
任何帮助,将不胜感激......
获取Given Json对象中所有路径的简单方法是什么?例如:
{
app:{
profiles:'default'
},
application:{
name:'Master Service',
id:'server-master'
},
server:{
protocol:'http',
host:'localhost',
port:8098,
context:null
}
}
Run Code Online (Sandbox Code Playgroud)
我应该能够生成以下对象
app.profiles=default
application.name=Master Service
application.id=server-master
Run Code Online (Sandbox Code Playgroud)
我能够使用递归函数实现相同的功能.我想知道json是否有内置函数可以做到这一点.
有没有办法使用内置的Jackson功能,使用java将json对象列表转换为HashMap
说明:我需要解析的Json结构
{
list:[
{
keyId : 1,
keyLabel : "Test 1",
valueId: 34,
valueLabel: "Test Lable"
},
{
keyId : 2,
keyLabel : "Test 2",
valueId: 35,
valueLabel: "Test Lable"
},
{
keyId : 3,
keyLabel : "Test 3",
valueId: 36,
valueLabel: "Test Lable"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我期待的对象模型,
class Key{
int keyId;
String keyLable;
hashCode(){
return keyId.hashCode();
}
}
class Value{
int valueId;
String valueLable;
hashCode(){
return valueId.hashCode();
}
}
Run Code Online (Sandbox Code Playgroud)
我需要将上面的json列表转换为这样的地图,
HashMap<Key,Value> map;
Run Code Online (Sandbox Code Playgroud) 我正在做Spring MVC 4.1 + Gradle + FlywayDB中的数据库迁移项目。
在运行我的应用程序之前,我使用flyway gradle插件来配置任何数据库迁移。例如:在部署之前,请先执行以下命令
gradle flywayMigrate
Run Code Online (Sandbox Code Playgroud)
我正在使用多个yaml文件作为我的项目属性文件,例如db配置和其他项目特定的配置(多个文件,因为每个环境都使用其在配置文件上的名称为application-dev.yml,application-live.yml等)我在这里面临的特定问题是,我需要在build.gradle中配置1 db配置以实现flyway db配置,对于应用程序,我需要在application.yml文件上进行相同的配置。
gradle有一种方法可以让我从同一文件中提供这些属性,而不必在build gradle或gradle.properties文件中再次配置它们。我可以做一些gradle脚本来读取我的配置文件,也可以做一些hacks ....但是任何人都可以使用任何适当的gradle插件或一些其他经过预测试的工具...请让我知道....那里有更好的解决方案...如果您不介意,请分享。
保留使用protobuf3定义的数据的正确方法是什么。我正在使用golang和Java,它们都支持ORM。在带有Hibernate的Java和带有gorm的golang中。这两个地方我都需要将生成的代码转换为相应的实体模型。我觉得维护相同的对象结构以使ORM理解起来更加痛苦。有没有可以与protobuf对象一起使用的数据库。或者,我可以在protobuf本身中定义对象之间的关系。
任何帮助真的很感激。
在使用特使代理进行外部身份验证后,是否有任何方法可以删除上游的标头?我们计划为我们的内部 API 网关迁移到 Envoy 代理,但现在这是一个障碍。
例如:外部认证服务获取请求并处理认证头,万一验证失败,它会抛出401。但如果成功,我想阻止auth头进入上游。
根据文档Ext Auth:
成功的检查允许授权服务在将原始请求分派到上游之前添加或覆盖来自原始请求的标头。这是通过配置授权响应中的哪些标头应该发送到上游来完成的。请参阅下面的 allowed_authorization_headers。
没有提到我是否可以完全删除上游的标题。
我可以选择覆盖标头,但这会导致上游服务器上的标头冲突。所以这不是一个可能的解决方案。
我怎样才能做到这一点?
java ×7
spring ×3
hocon ×2
properties ×2
spring-mvc ×2
amazon-ecs ×1
aws-ecr ×1
envoyproxy ×1
flyway ×1
go ×1
gradle ×1
gulp ×1
jackson ×1
javascript ×1
json ×1
jsonpath ×1
kubernetes ×1
node.js ×1
objectmapper ×1