Spring Boot Admin
是一個管理和監(jiān)視Spring Boot
應用程序的項目撒穷。應用程序通過Spring Boot Admin
客戶端(通過HTTP)注冊,或者使用Spring Cloud
服務發(fā)現(xiàn)注冊禽笑。
1、spring-boot-admin-server
服務
server
端只要加入spring-boot-admin-starter-server
依賴即可僚稿,默認的情況下是不需要用戶名及密碼即可登入查看服務詳情蚀同,所以可以加入spring-boot-starter-security
增加安全策略蠢络。
- 關鍵依賴如下
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- 代碼及配置如下
SpringBootAdminApplication.java
@EnableAdminServer
@SpringBootApplication
public class SpringBootAdminApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAdminApplication.class, args);
}
}
SecurityConfig.java
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final String adminContextPath;
public SecurityConfig(AdminServerProperties adminServerProperties) {
this.adminContextPath = adminServerProperties.getContextPath();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
successHandler.setDefaultTargetUrl(adminContextPath + "/");
http.authorizeRequests()
//1.配置所有靜態(tài)資源和登錄頁可以公開訪問
.antMatchers(adminContextPath + "/assets/**").permitAll()
.antMatchers(adminContextPath + "/login").permitAll()
.anyRequest().authenticated()
.and()
//2.配置登錄和登出路徑
.formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
.logout().logoutUrl(adminContextPath + "/logout").and()
//3.開啟http basic支持刹孔,admin-client注冊時需要使用
.httpBasic().and()
.csrf()
//4.開啟基于cookie的csrf保護
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
//5.忽略這些路徑的csrf保護以便admin-client注冊
.ignoringAntMatchers(
adminContextPath + "/instances",
adminContextPath + "/actuator/**"
);
}
}
application.yml
server:
port: 8081
spring:
security:
user:
name: root
password: root123
- 界面演示
使用用戶名root
密碼root123
登錄
image.png
image.png
2冕杠、spring-boot-admin-client
客戶端服務
- 關鍵依賴
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
- 代碼及配置如下,使用一個
schedule
和cache
演示每秒輸出日志并獲取cache
數(shù)據(jù)
SpringBootAdminClientApplication .java
@EnableCaching
@EnableScheduling
@SpringBootApplication
public class SpringBootAdminClientApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAdminClientApplication.class, args);
}
}
application.yml兢交,注意需要配置
logging.file.name
才可在日志中查看到實時日志
server:
port: 8082
spring:
application:
name: spring-boot-admin-client
boot:
admin:
client:
url: http://localhost:8081
username: root
password: root123
logging:
level:
root: info
file:
name: logs/client.log
management:
endpoints:
web:
exposure:
include: "*"
CacheService.java
@Slf4j
@Service
@CacheConfig(cacheNames = "cacheService")
public class CacheService {
@Cacheable(key = "#name")
public String get(String name) {
log.info("{}", name);
return "name:" + name;
}
}
AdminSchedule.java 模擬每秒獲取緩存數(shù)據(jù),可以spring-boot-admin控制臺中清除此緩存
@Slf4j
@Component
public class AdminSchedule {
@Autowired
private CacheService cacheService;
@Scheduled(cron = "0/1 * * * * ?")
public void process() {
cacheService.get("name" + System.currentTimeMillis() / 10000);
log.info("schedule success");
}
}
- 查看spring-boot-admin-client日志
image.png
- 查看spring-boot-admin-client緩存定義凳干,可清除緩存
image.png
- 查看基本詳情
image.png
3涧团、使用spring-cloud注冊中心注冊
如果微服務已經(jīng)使用eureka泌绣、consul、zookeeper等注冊中心阿迈,可更加方便集成苗沧,如eureka,增加以下依賴即可
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>