基于文件系统的Spring Cloud 配置服务器

如果想根据不同环境,使用不同的启动命令,读取不同的配置去启动项目,可以将不同环境信息写入文件中,在启动项目的时候,指定环境就可以了.

创建一个SpringCloud工程.

pom文件:


       
4.0.0

<groupId>com.thoughtmechanix</groupId>
<artifactId>configurationserver</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>Config Server</name>
<description>Config Server demo project</description>

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>1.4.4.RELEASE</version>
</parent>
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-dependencies</artifactId>
			<version>Camden.SR5</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.cloud</groupId>
		<artifactId>spring-cloud-starter-config</artifactId>
	</dependency>
	<!-- java9 开始,没有了jaxb,需要自己加入 START-->
	<dependency>
		<groupId>javax.xml.bind</groupId>
		<artifactId>jaxb-api</artifactId>
		<version>2.3.0</version>
	</dependency>
	<dependency>
		<groupId>com.sun.xml.bind</groupId>
		<artifactId>jaxb-impl</artifactId>
		<version>2.3.0</version>
	</dependency>
	<dependency>
		<groupId>com.sun.xml.bind</groupId>
		<artifactId>jaxb-core</artifactId>
		<version>2.3.0</version>
	</dependency>
	<dependency>
		<groupId>javax.activation</groupId>
		<artifactId>activation</artifactId>
		<version>1.1.1</version>
	</dependency>
	<!-- java9 开始,没有了jaxb,需要自己加入  END-->
</dependencies>

<!--Docker build Config -->
<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<start-class>com.thoughtmechanix.confsvr.ConfigServerApplication</start-class>
	<java.version>1.8</java.version>
	<docker.image.name>johncarnell/tmx-confsvr</docker.image.name>
	<docker.image.tag>chapter3</docker.image.tag>
</properties>

<build>
	<plugins>
		<!-- We use the Resources plugin to filer Dockerfile and run.sh, it inserts 
			actual JAR filename -->
		<!-- The final Dockerfile will be created in target/dockerfile/Dockerfile -->
		<plugin>
			<artifactId>maven-resources-plugin</artifactId>
			<executions>
				<execution>
					<id>copy-resources</id>
					<!-- here the phase you need -->
					<phase>validate</phase>
					<goals>
						<goal>copy-resources</goal>
					</goals>
					<configuration>
						<outputDirectory>${basedir}/target/dockerfile</outputDirectory>
						<resources>
							<resource>
								<directory>src/main/docker</directory>
								<filtering>true</filtering>
							</resource>
						</resources>
					</configuration>
				</execution>
			</executions>
		</plugin>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-jar-plugin</artifactId>
			<version>2.4</version>
		</plugin>

		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-resources-plugin</artifactId>
			<version>2.4</version>
		</plugin>

		<plugin>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>2.3.2</version>
			<configuration>
				<source>1.8</source>
				<target>1.8</target>
			</configuration>
		</plugin>
		<plugin>
			<groupId>com.spotify</groupId>
			<artifactId>docker-maven-plugin</artifactId>
			<version>0.4.10</version>
			<configuration>
				<imageName>${docker.image.name}:${docker.image.tag}</imageName>
				<dockerDirectory>${basedir}/target/dockerfile</dockerDirectory>
				<resources>
					<resource>
						<targetPath>/</targetPath>
						<directory>${project.build.directory}</directory>
						<include>${project.build.finalName}.jar</include>
					</resource>
				</resources>
			</configuration>
		</plugin>
	</plugins>
      </build>

项目路径:

config下的licensingservice是不同环境的配置文件.

在application.yml中配置项目扫描的配置文件路径:

server:
           port: 8888
        spring:
          profiles:
            active: native
          cloud:
             config:
               server:
                   native:
                       searchLocations: classpath:config/,classpath:config/licensingservice

在licensingservice中的配置文件命名规则是:应用程序名称-环境名称.yml

配置好后,启动程序,就能够得到相应环境的配置信息.

http://localhost:8888/licensingservice/dev2

是json字符串.

posted @ 2021-04-30 15:26  Monstro  阅读(128)  评论(0)    收藏  举报