1. 程式人生 > >springboot應用整合springbootadmin實現應用監控(解決無法傳送郵件問題)

springboot應用整合springbootadmin實現應用監控(解決無法傳送郵件問題)

架設服務端

1.新增依賴springbootadmin和spring security

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId
>
<artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>
${spring-boot-admin.version}</version> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-server-ui</artifactId> <version>${spring-boot-admin.version}</version>
</dependency>
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>de.codecentric</groupId>
                <artifactId>spring-boot-admin-dependencies</artifactId>
                <version>${spring-boot-admin.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

2.添加註解和配置

@EnableAdminServer
@SpringBootApplication
@EnableWebSecurity
public class SpringBootAdminApplication {

    @Autowired
    private SecurityProperties securityProperties;

    @Profile("insecure")
    @Configuration
    public static class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests()
                .anyRequest()
                .permitAll()
                .and()
                .csrf()
                .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                .ignoringAntMatchers("/instances", "/actuator/**");
        }
    }

    @Profile("secure")
    @Configuration
    public static class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
        private final String adminContextPath;
        public SecuritySecureConfig(AdminServerProperties adminServerProperties) {
            this.adminContextPath = adminServerProperties.getContextPath();
        }

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            // @formatter:off

            SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
            successHandler.setTargetUrlParameter("redirectTo");
            successHandler.setDefaultTargetUrl(adminContextPath + "/");

            http.authorizeRequests()
                .antMatchers(adminContextPath + "/assets/**").permitAll()
                .antMatchers(adminContextPath + "/login").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
                .logout().logoutUrl(adminContextPath + "/logout").and()
                .httpBasic().and()
                .csrf()
                .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                .ignoringAntMatchers("/instances", "/actuator/**");
            http.csrf().disable();
            // @formatter:on
        }
    }

    public static void main(String[] args) {
        SpringApplication.run(SpringBootAdminApplication.class, args);
    }

}

3.yml配置

server:
  port: 9201
spring:
  application:
    name: spring-cloud-admin-center
  profiles:
    active: secure
  boot:
    admin:
      discovery:
        ignored-services: spring-cloud-admin-center
---
spring:
  profiles: insecure

---
spring:
  profiles: secure
  security:
    user:
      name: "admin"
      password: "123456"

傳送郵件配置

@Configuration
public class AdminServerConfiguration {


    @Autowired
    private ApplicationContext applicationContext;

    public TemplateEngine mailNotifierTemplateEngine() {
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setApplicationContext(this.applicationContext);
        resolver.setTemplateMode(TemplateMode.HTML);
        resolver.setCharacterEncoding(StandardCharsets.UTF_8.name());

        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.addTemplateResolver(resolver);
        return templateEngine;
    }


    @Bean
    @ConfigurationProperties("spring.boot.admin.notify.mail")
    public Notifier notifier(JavaMailSender mailSender, InstanceRepository repository) {
        MailNotifier mailNotifier = new MailNotifier(mailSender, repository, mailNotifierTemplateEngine());
        mailNotifier.setIgnoreChanges(new String[]{});
        return mailNotifier;
    }


}

完成程式碼已經分享至github,點我跳轉

客戶端

1.新增依賴

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jolokia</groupId>
            <artifactId>jolokia-core</artifactId>
        </dependency>
          <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-client</artifactId>
            <version>2.0.1</version>
        </dependency>

2.新增配置

spring.boot.admin.client.username=admin
spring.boot.admin.client.password=123456
spring.boot.admin.client.url=admin地址
spring.boot.admin.client.instance.name=xxxxl-admin
spring.boot.admin.client.instance.management-base-url=本專案地址
spring.boot.admin.client.instance.service-base-url=本專案地址
management.endpoints.web.exposure.include=*

完畢