Java Spring - Spring Cloud Config Server

I. Giới thiệu

Java Srping cung cấp tính năng cho phép quản lý file config tập trung thông qua các hệ thống quản lý version như git.

Việc deploy và thay đổi config sẽ dễ dàng hơn khi cloud config hỗ trợ lấy config theo môi trường.

Spring Cloud Config Server đứng giữa control version system (git) và Spring Cloud Config Client (các api cần dùng config).

II. Khởi tạo project Cloud Config Server
1. pom.xml
        
    <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.cloudconfig</groupId>
    <artifactId>cloud-config-server</artifactId>
    <version>1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.3</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    
    <properties>
        <java.version>1.8</java.version>
        <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
        <spring-cloud.version>2020.0.3</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>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

</project>
        
      
2. application.yml
        
    server:
        port: 8888 # tự tùy chỉnh 
    
    spring:
        application:
            name: cloud-config # tự đặt tên
        cloud:
            config:
                server:
                    git:
                    uri: https://user@bitbucket.org/user/config-client # thay đường dẫn đến control version system
                    clone-on-start: true
                    username: username
                    password: password
                    searchPaths: '{application}'
        security:
            user:
                name: root
                password: pass@2021
        
    logging:
        file:
            path: /var/log/${spring.application.name}
        level:
            org.springframework: info
            root: info
        
      

Trong đó:

- spring.cloud.server.git.uri: config đến hệ thống quản lý version chứa các file config (trong ví dụ này mình dùng bitbucket)

- spring.cloud.server.username: user login hệ thống quản lý version chứa các file config

- spring.cloud.server.password: password login hệ thống quản lý version chứa các file config

- spring.cloud.server.searchPaths: điều kiện thỏa mãn để tìm file config (folder nào, tên application là gì). Ở đây mình để theo {application}-{profile}

- spring.security.user.name: user login khi gọi cloud config server

- spring.security.user.password: password login khi gọi cloud config server

3. logback-spring.xml
        
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <springProperty scope="context" name="springAppName"
            source="spring.application.name" />
        <springProperty scope="context" name="LOGS"
            source="logging.file.path"></springProperty>
    
        <appender name="Console"
            class="ch.qos.logback.core.ConsoleAppender">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <Pattern>
                    %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable
                </Pattern>
            </layout>
        </appender>
    
        <appender name="RollingFile"
            class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOGS}/${springAppName}-logger.log</file>
            <encoder
                class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
            </encoder>
    
            <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- rollover daily and when the file reaches 10 MegaBytes -->
                <fileNamePattern>${LOGS}/archived/${springAppName}-logger-%d{yyyy-MM-dd}.%i.log
                </fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>10MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
        </appender>
    
        <!-- LOG everything at INFO level -->
        <root level="info">
            <appender-ref ref="RollingFile" />
            <appender-ref ref="Console" />
        </root>
    
        <!-- LOG at TRACE level -->
        <logger name="com.cloudconfig" level="trace" additivity="false">
            <appender-ref ref="RollingFile" />
            <appender-ref ref="Console" />
        </logger>
    
    </configuration>
        
      
4. ConfigServer Boot
        
    package com.cloudconfig;

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.config.server.EnableConfigServer;
    
    @SpringBootApplication
    @EnableConfigServer
    public class ConfigServer {
    
        public static void main(String[] arguments) {
            SpringApplication.run(ConfigServer.class, arguments);
        }
    
    }
            
        
      
5. Tiến hành build chạy project

Nhận xét

Bài đăng phổ biến từ blog này

IBM BPM - Date

BPM WebSphere - Create Datasource (Connect to DB via JDBC)

IBM BPM - Error: Save error