在我的PCF日志中,config-client应用程序给出 “ ConfigServicePropertySourceLocator:无法找到PropertySource: 401未经授权”
我有gitlab存储库,可在PCF配置服务器中提供属性文件。 如果我检查配置服务器->管理->它会给出“ 配置服务器在线”
我在哪里缺少配置?
bootstrap.yml config-client-app
spring:
application:
name: <config-client-name>
cloud:
config:
enabled: true
name: <config-server-instance-name>
uri: <uri details from view credential modal>
# username: <tried different permutations to get it working>
# password: <tried different permutations to get it working>
management:
security:
enabled: false
manifest.yml config-client-app
applications:
- name: <app-name>
host: <app-name>
memory: 1024M
instances: 1
path: /target/<app-name>-0.0.1-SNAPSHOT.jar
buildpack: java_buildpack_offline
services:
- <pcf config server instance name>
env:
SPRING_PROFILES_ACTIVE: dev
我已经做了很多工作以获得一些结果,但是没有运气,示例应用程序运行良好。 我已经在github存储库中尝试了自己的config-server和config client应用程序,并且工作正常。
但是在PCF中,我完全陷入困境,请帮忙。
答案 0 :(得分:0)
您的配置看起来没有任何问题。如果您看到Config服务器在PCF中处于在线状态,则意味着config服务已正确初始化并可以使用。
但是让我们尝试适合您的示例应用程序。
如果您使用gradle build,请在build.gradle
中添加以下信息(或相应添加pom.xml
。)
SCS(Spring Cloud services)(提到的版本与springBootVersion = '2.0.6.RELEASE'
兼容,如果您使用的是其他版本的spring-boot,请检查其可比性。)
导入{
mavenBom "io.pivotal.spring.cloud:spring-cloud-services-dependencies:2.0.1.RELEASE"
mavenBom "org.springframework.cloud:spring-cloud-dependencies:Finchley.RELEASE"
}
包括配置客户端依赖项
compile("io.pivotal.spring.cloud:spring-cloud-services-starter-config-client")
现在让我们转到bootstrap.yml
:
仅以下信息即可选择属性
spring:
application:
name: <config-client-name>
如果您在推送到PCF时使用了相同的有效配置文件,则无需在application.yml
中进行更改。
答案 1 :(得分:0)
@Avhi-您的回答帮助了我。
我的错误是我使用了错误的依赖关系,并且添加了不必要的信息。在 bootstrap.yml
中spring:
application:
name: <config-client-name>
cloud:
config:
enabled: true
name: <config-server-instance-name>
uri: <uri details from view credential modal>
# username: <tried different permutations to get it working>
# password: <tried different permutations to get it working>
management:
security:
enabled: false
name: <config-server-instance-name>
,我们应该配置要从客户端应用程序指向的属性文件名,我正在提供配置服务器实例名。
注意:我了解到我们可以指定多个用逗号分隔的属性文件。
uri: <uri details from view credential modal>
# username: <tried different permutations to get it working>
# password: <tried different permutations to get it working>
以上三个属性没有用,因此我浪费了大部分时间。
除非我们要在localhost:8080应用程序中绑定配置服务器服务,否则无需设置这些值。
在我们的manifest.yml中提供服务名称没有任何危害,并且由于它不是应用程序的一部分,因此不会造成任何麻烦。顺便说一句,我们可以使用CLI或PCF App Manager Web控制台来创建服务并将其绑定到我们的应用程序。
完成所有设置后,我们可以期望Spring Security网页输入用户名和密码(显然我们不知道)。如果配置了spring安全性,那么很好,或者我们可以在测试时禁用。
我做了两件事来禁用和激活执行器的所有端点(就像我在使用spring-boot 2.x)
添加了如下依赖关系:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-rsa</artifactId>
<!-- <version>1.0.5.RELEASE</version> -->
</dependency>
并创建SecurityConfiguration以显式禁用安全性
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception{
http.csrf().disable();
http.authorizeRequests().antMatchers("/").permitAll();
}
}
要使所有执行器端点均可访问,我已执行以下操作:
management:
endpoints:
web:
exposure:
include: "*"