标签: spring-cloud

以编程方式更改 Spring Boot 属性

我正在尝试为使用@RefreshScope. 我想添加一个实际更改属性并断言应用程序正确响应的测试。我已经想出了如何触发刷新(自动装配RefreshScope和调用refresh(...)),但我还没有想出修改属性的方法。如果可能,我想直接写入属性源(而不是必须处理文件),但我不确定在哪里查看。

更新

这是我正在寻找的示例:

public class SomeClassWithAProperty {
    @Value{"my.property"}
    private String myProperty;

    public String getMyProperty() { ... }
}

public class SomeOtherBean {
    public SomeOtherBean(SomeClassWithAProperty classWithProp) { ... }

    public String getGreeting() {
        return "Hello " + classWithProp.getMyProperty() + "!";
    }
}

@Configuration
public class ConfigClass {
    @Bean
    @RefreshScope
    SomeClassWithAProperty someClassWithAProperty() { ...}

    @Bean
    SomeOtherBean someOtherBean() {
        return new SomeOtherBean(someClassWithAProperty());
    }
}

public class MyAppIT {
    private static final DEFAULT_MY_PROP_VALUE = "World";

    @Autowired
    public …
Run Code Online (Sandbox Code Playgroud)

java spring spring-cloud

2
推荐指数
1
解决办法
9015
查看次数

Spring Cloud 和 Eureka:java.lang.IllegalStateException:没有可用于 ACCOUNTS-SERVICE 的实例

我一直在尝试使用 Spring Cloud 和 Eureka 创建微服务。

现在我有一个服务器可以接收 2 个微服务:ACCOUNTS-SERVICE 和 WEB-SERVICE

[nio-1111-exec-2] c.n.e.registry.AbstractInstanceRegistry  : Registered instance ACCOUNTS-SERVICE/192.168.0.13:accounts-service:2222 with status UP (replication=false)
[nio-1111-exec-4] c.n.e.registry.AbstractInstanceRegistry  : Registered instance WEB-SERVICE/192.168.0.13:web-service:3333 with status UP (replication=false)
Run Code Online (Sandbox Code Playgroud)

这是我的网络服务:

package eu.epitech.jug.services.web;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

/**
 * Created by sadzeih on 12/9/16.
 */
@SpringBootApplication
@EnableDiscoveryClient
@ComponentScan(useDefaultFilters=false)
public class WebServer {
    public static void main(String[] args) {
        // Will configure using web-server.yml
        System.setProperty("spring.config.name", "web-server");
        SpringApplication.run(WebServer.class, args); …
Run Code Online (Sandbox Code Playgroud)

spring spring-cloud netflix-eureka

2
推荐指数
2
解决办法
9136
查看次数

如何编写 netflix zuul 过滤器来更改响应位置标头属性?

例如,我有重定向到 x.jsp 的下游服务,此位置不在网关路由中

gateway route --- localhost:8080/app - 192.168.1.1:80 (DownStream app)
Run Code Online (Sandbox Code Playgroud)

在 DownStream 应用程序中,当用户未登录时,它重定向到 192.168.1.1:80/Login.jsp,它位于Location响应的标头中。

此 URL 未使用网关。

我想编写一个 zuul 过滤器,通过在 zuul 动态路由中映射来更改此重定向 url,例如,对于在 zuul 过滤器更改Location标头中由网关路由的每个 url 。我怎样才能做到这一点?

spring-security spring-cloud netflix-zuul spring-cloud-netflix

2
推荐指数
1
解决办法
3109
查看次数

在 Spring Cloud Config Client 中启用 /bus/refresh 端点

我的 Spring Cloud Config Client 依赖于spring.cloud.starter.bus.amqp,但它仍然没有启用/bus/refresh endpoint

build.gradle    
compile("org.springframework.cloud:spring-cloud-starter-stream-rabbit:1.1.3.RELEASE")    
compile("org.springframework.cloud:spring-cloud-starter-bus-amqp:1.2.2.RELEASE")
Run Code Online (Sandbox Code Playgroud)

我的配置客户端应用程序中有这些依赖项,但仍然没有启用/bus/refresh, /bus/env.

请让我知道我的客户端应用程序中缺少什么。

笔记:

spring.cloud.bus.refresh.enabled: true
spring.cloud.bus.env.enabled: true
endpoints.spring.cloud.bus.refresh.enabled: true
endpoints.spring.cloud.bus.env.enabled: true
Run Code Online (Sandbox Code Playgroud)

我已尝试在 , 中application.ymlapplication.properties在 , 使用时设置这些指标BusAutoConfiguration以启用/bus/*端点。

@ConditionalOnProperty(value = "endpoints.spring.cloud.bus.refresh.enabled", matchIfMissing = true)
Run Code Online (Sandbox Code Playgroud)

在我的 Spring Cloud Config Server 应用程序中,我禁用了这些端点,即设置为 false

endpoints.spring.cloud.bus.refresh.enabled: false
endpoints.spring.cloud.bus.env.enabled: false
Run Code Online (Sandbox Code Playgroud)

并观察到在 Spring Boot 启动期间/bus/*没有启用端点。

spring-cloud spring-cloud-config spring-cloud-bus

2
推荐指数
2
解决办法
9004
查看次数

Netflix Archaius 与 Spring Cloud Config 服务器

我跟着这个文档Archaius和其他一些网上的文章。但是,大概每个服务都应该有 Archaius 或配置相关的代码/依赖项(-jars)来加载配置值。我担心的是,如果加载配置需要更改,则必须重新加载/重新部署每个服务。
一季度。任何人都可以让我知道如何保持集中的 Archaius 配置服务,以便客户端服务提取配置。

相反,Spring Cloud Config 服务器完成这项工作——所有配置都集中在一个地方。但我觉得它缺乏从自定义资源加载配置 - 例如,从 Archaius 提供的数据库加载数据。
Q2。有没有办法让 Config Server 从 Archaius 加载配置?

spring spring-cloud spring-cloud-netflix spring-cloud-config

2
推荐指数
1
解决办法
2433
查看次数

如何列出所有 Spring Boot 数据源?

如何列出所有 Spring Boot 数据源?包括使用 Spring Cloud Config 配置的和其他自动配置的基于 pom.xml 中 db 驱动程序的 Maven 依赖项

spring spring-data spring-boot spring-cloud

2
推荐指数
1
解决办法
1006
查看次数

Spring Sleuth 坚持向 Zipkin 发送 10% 的请求

默认情况下,Spring Sleuth 只向 Zipkin 发送 10% 的请求。通过设置,spring.sleuth.sampler.percentage您可以增加百分比。不幸的是,无论我将其设置为什么值,它都停留在 10%。我试过 1.0、0.5、1、100。

输出来自 /env

            "spring.sleuth.sampler.percentage": {
                "value": 1,
                "origin": "class path resource [application.yml]:77:19"
            }
Run Code Online (Sandbox Code Playgroud)

不管价值如何,当我提出多个请求时,只有 10% 的请求到达 Zipkin。

我们使用的是 Spring Cloud 的 Finchley.M8 版本和 Spring Boot 的 2.0.0.RELEASE 版本。

下面是相关的 POM 设置。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring-cloud.version>Finchley.M8</spring-cloud.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

    <dependency> 
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zipkin</artifactId>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

这可能是一个错误吗?

zipkin spring-cloud spring-cloud-sleuth

2
推荐指数
1
解决办法
2633
查看次数

使用 Feign 和 Spring MVC 时对 ResponseEntity 进行编码和解码?

我正在尝试使用动态伪装。但是从 RequestMapping 转换响应时我有很多问题。

控制器.java :

@RequestMapping("/users")
public ResponseEntity<List<User>> sendUsers
Run Code Online (Sandbox Code Playgroud)

MyFeignClient.java :

public interface MyFeignClient {

@RequestLine(value="GET /api/users")
ResponseEntity<List<User>> getUsers();}
Run Code Online (Sandbox Code Playgroud)

主类.java :

MyFeignClient callService = Feign.builder()
            .encoder(new Encoder.Default())
            .decoder(new Decoder.Default())
            .requestInterceptor(new FeignConfig(props).getJwtRequestInterceptor())
            .target(MyFeignClient.class, "http://localhost:8710");
Run Code Online (Sandbox Code Playgroud)

进而 :

ResponseEntity<List<User>> txnPool = callService.getUsers();
Run Code Online (Sandbox Code Playgroud)

但我有以下错误:

feign.codec.DecodeException User 不是此解码器支持的类型

我该如何解决?

spring-boot jhipster spring-cloud spring-cloud-feign

2
推荐指数
1
解决办法
8526
查看次数

如何在 POST 请求中向其他 Feign 客户端发出 GET 请求?

我有一个 REST API 端点,它使用多个 Fe​​ign 客户端来执行验证和处理。有问题的端点接受 POST 请求,但用于验证的 Feign 客户端接受 GET 请求。当我向 API 端点发出 POST 请求时,我从需要 GET 的 Feign 客户端收到以下错误。我的 Feign 客户端方法用 注释@GetMapping,但似乎请求仍在作为 POST 发送。如何在 POST 请求中向 Feign 客户端发出 GET 请求?

feign.FeignException: status 405 reading ValidationClient#checkData(String); content:
{"timestamp":"2018-08-06T14:43:45.998+0000","status":405,"error":"Method Not Allowed","message":"Request method 'POST' not supported","path":"/"}
    at feign.FeignException.errorStatus(FeignException.java:62) ~[feign-core-9.5.1.jar:na]
    at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:91) ~[feign-core-9.5.1.jar:na]
    at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:138) ~[feign-core-9.5.1.jar:na]
    at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76) ~[feign-core-9.5.1.jar:na]
    at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103) ~[feign-core-9.5.1.jar:na]
    at com.sun.proxy.$Proxy129.checkFormat(Unknown Source) ~[na:na]
    at com.example.datainput.DataInputController.acceptData(DataInputController.java:20) ~[classes/:na]
    at sun.reflect.GeneratedMethodAccessor126.invoke(Unknown Source) ~[na:na]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45005) ~[na:1.8.0_172]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_172]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) …
Run Code Online (Sandbox Code Playgroud)

java spring spring-cloud

2
推荐指数
1
解决办法
8692
查看次数

如何在@StreamListener 中添加日期条件

假设,我能够通过 Kafka 或 RabbitMQ 发送消息并使用 @StreamListener 使用它们。

绑定器配置为 content-type = 'application/json',所以我想可以在有效负载上添加条件。

我的要求是仅当字段的日期在 now() 之前时才获取元素。当此条件为真时,将消耗所有其他元素。

例如,我希望像这样:

@StreamListener(value = INPUT, condition = "data.startDate > now()")
public void onMessage(@Payload Data data) { 
    // ...
}
Run Code Online (Sandbox Code Playgroud)

第一个问题是我收到错误:EL1008E:在“byte[]”类型的对象上找不到属性或字段“startDate”——可能不是公共的或无效的?

spring-boot spring-cloud spring-cloud-stream

2
推荐指数
1
解决办法
2563
查看次数