spring cloudcloud 端口设置0是否会出现端口冲突

当前位置浏览文章
注册中心Eureka Server新建项目用@EnableEurekaServer即可以让应使用变为Eureka服务器,这是由于spring boot封装了Eureka Server,让你能嵌入到应使用中直接用直接运行成功如下但是不断报异常,why?这是由于该应使用尽管是 Server 端,但也同时是 Client 端,也需要一个注册中心将自己注册进去为消除其异常,修改下配置配置需要注册的地址,也就是往自己身上注册通过观察源码,知道其实是一个 map, 所以配置如下启动依旧报错,其实正常问题,由于服务端自己又是 Server, 又是 Client, 服务端未启动完成时,用户端一定是无法找到服务端的但是 eureka 的服务端/用户端采使用心跳通信方式可看到地址已随配置被改变接下来配置实例名实例名被修改成功但是该应使用本身就是个注册中心,不需要将其显示在注册实例中,通过以下配置为防止冲突,将端口号回改为默认服务中心为避免每次手动启动,将应使用打成 war 包(jar)通过 java 命令启动启动成功效果Mac 下 Ctrl+C 退出服务后端执行查看其相关进程信息如此该应使用就方便了我们,不需要每次都去手动启动应使用,在后端会重启,若想杀死进程直接 kill3.3 Eureka Client的用@EnableDiscoveryClient注解这通过META-INF/spring.factories查找DiscoveryClient接口的实现Discovery Client的实现将在org.springframework.cloud.client.discovery.EnableDiscoveryClient键下的spring.factories中增加一个配置类。DiscoveryClient实现的示例是Spring Cloud Netflix Eureka,Spring Cloud Consul发现和Spring Cloud Zookeeper发现。默认情况下,DiscoveryClient的实现将用远程发现服务器自动注册本地Spring Boot服务器。能通过在@EnableDiscoveryClient中设置autoRegister=false来禁使用此功可以。启动Server, 再启动 Client发现并没有注册成功实例由于没有配置注册目标地址信息之后再次重启,仍旧无法注册成功,几经勘察,增加以下依赖后,成功运行,注册到服务器再指定 client 名字发现成功注册此为 client 应使用ip 地址但其实能自己设置接着点击进入那个链接,URL如下Eureka保证AP有时会发现如下红色警戒!Eureka看明白了这一点,因而在设计时就优先保证可使用性。我们能容忍注册中心返回的是几分钟以前的注册信息,但不可以接受服务直接down掉不可使用。也就是说,服务注册功可以对可使用性的要求要高于一致性。假如Eureka服务节点在短时间里丢失了大量的心跳连接(注:可可以发生了网络故障),那么这个 Eureka节点会进入“自我保护模式”,同时保留那些“心跳死亡”的服务注册信息不过期。此时,这个Eureka节点对于新的服务还可以提供注册服务,对于“死亡”的依然保留,以防还有用户端向其发起请求。当网络故障恢复后,这个Eureka节点会退出“自我保护模式”。Eureka的哲学是,同时保留“好数据”与“坏数据”总比丢掉任何数据要更好。在开发模式,最好关闭该模式(默认是开启的),仅可以在开发环境关闭!,生产环境禁止关闭!!!3.4 Eureka的高可使用假如一台 eureka宕机了咋办呢,为了实现高可使用,假如直接加一台服务器并无任何卵使用,考虑将两台 eureka 互相注册复制得到两份 eureka,并以端口区分将 eureka1注册到 eureka2上并启动将 eureka2注册到 eureka1上并启动发现 client 在1,2同时都注册成功了!如果此时 eureka1宕机了,会发生什么呢?我们来将1给关闭发现2仍旧存活,并且 client 还在连接若此时再 client 端重启又会发生什么呢?由于无法注册,自然报错了,E2上也没有 client 端再连接了那么问题来了,怎样才可以保证 E1宕机后, client 仍可以注册在 E2上呢?只需保持每次都同时往两个 E 注册同理可得,当有3个 E 时,如此相互注册新建 E3对于我们的开发环境,部署一个 E 就可,不再集群3.5 Eureka总结3.6 分布式下服务注册的地位和原理A 类比青楼中的嫖客, B 类比青楼女子,注册中心呢就相当于青楼中的妈咪一般 嫖客服务一来,就一定直接点名春花还是秋月呀,直接问妈咪要花魁就行我正在「泥瓦匠BYSocket 知识星期」和朋友们讨论有趣的话题,你一起来吧?
关注我的公众号
关注即可得系列教程文章哦
简历邮件我
- 93,799 views - 82,716 views - 67,283 views - 46,921 views - 44,497 views - 39,583 views - 33,975 views - 33,387 views - 28,779 views - 27,702 views
公告()是新组建的关于 Spring 的纯技术交流社区(涵盖 Spring Boot、Spring Cloud 等内容),集诸多开源爱好者和技术大牛贡献内容和交流问题。我们不夸大、不装逼、做最纯粹的技术分享!!!
看看我们超强的群众基础,欢迎有兴趣的朋友加入 QQ 群分享与交流:「」
数据昨日访问: 5,404本月访问: 161,490累计访问: 7,961,688总计文章: 144分类目录
读者,你好
我是泥瓦匠BYSocket
“做快乐的事,并帮助社会与人”
微信:139-
今年我在博客会写
Spring WebFlux
关注我的公众号
还有,我在有赞工作。关注我联系我在。
2018年七月
91012131415
16171819202122
23242526272829Spring Cloud 学习之旅 --- 随机端口启动多实例
本文内容很简单,就是使用随机端口来启动多个实例。
还记得之前我们在
学习创建服务提供者的时候,我们写了个配置文件吗?在配置文件中,我们指定了一个 2222 端口作为我们的监听端口,但是往往我们的服务提供者是多实例的,因此如果在单台机器中启动多个实例,不修改监听端口,势必会造成端口冲突,导致启动一个实例后,后续实例无法正常启动。
那么这里有两种解决方法:
(一)配置多个配置文件,通过不同的启动参数设置不同的端口进行实例的运行。
(二)采用随机端口的方式,每次启动时获取一个随机端口进行启动。
第一个方法其实很有效,但是在本文中,介绍的是第二种方法。
在 .properties / .yml 文件中,设置 server.port 属性的值为 ${random.int} 或者设置其值为 0 即可。
下面我们来做一个实验。
我们先启动我们的注册中心和服务消费者,以观察我们的最终结果。(由于注册中心会定时刷新可使用的服务提供者名单,所以修改了服务提供者后,无需等待服务提供者注册后再重启消费者)
实验(一)
采用 ${random.int} 的方式取随机值
修改配置文件,使 server.port 配置的值为 ${random.int} ,具体如下图:
随后将其启动,我们看看控制台的输出。
2017-06-19 19:33:57.321
INFO 10512 --- [
main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 14572 (http)
2017-06-19 19:33:57.322
INFO 10512 --- [
main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 14572
可以看到其中一条,我们的tomcat监听了14572端口。接着我们打开注册中心看看,具体如下图:
可以看到服务的确正常注册进来了。我们通过上一节的消费者调用一下该服务,看看效果。具体如下图:
但是好像有点事与愿违。我们为什么会调用不到呢?
我们查看一下注册中心中的simple-service的实例情况。我们通过访问注册中心的 /eureka/apps 查看所有注册到注册中心的实例的信息。
&SIMPLE-SERVICE&
&simple-service:-&
&localhost&
&SIMPLE-SERVICE&
&172.30.0.177&
enabled="true"&14258&
enabled="false"&443&
class="com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo"&
class="java.util.Collections$EmptyMap"/&
&http://localhost:14258/&
&http://localhost:14258/info&
&http://localhost:14258/health&
&simple-service&
&simple-service&
从上方的 &applications& 节点中的 &application& 中,有一个 &port& 断点,看到端口是 14258,与我们启动时控制台的 14572 有点不符,那么到底是什么原因导致这样的情况呢?
其实是每次在读取 server.port 属性时,都会获取到 ${random.int} ,然后对其进行解析,即每次读取该属性时都会重新获取一次随机值。因此会出现服务成功注册,但是缺无法调用的情况,根本原因是端口不对。
实验(二)
修改配置文件,使 server.port 配置的值为 0 ,具体如下图:
跟上一个实验相同进行启动,看到控制台的输出,监听端口为 57239 (以本人本机启动为例)
2017-06-19 19:48:04.433
INFO 9380 --- [
main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 57239 (http)
2017-06-19 19:48:04.434
INFO 9380 --- [
main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 57239
同样的,我们先不调用,直接看注册信息。访问注册中心IP端口的 /eureka/apps 查看信息。(此次截取的是部分信息)
&simple-service:&
&localhost&
&SIMPLE-SERVICE&
&172.30.0.177&
enabled="true"&57239&
enabled="false"&443&
class="com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo"&
class="java.util.Collections$EmptyMap"/&
&http://localhost:57239/&
&http://localhost:57239/info&
&http://localhost:57239/health&
&simple-service&
&simple-service&
此次实例的端口是57239 ,与控制台启动的端口相同。我们再调用一下消费者,看看效果。具体如下图:
我们可以看到消费者调用服务恢复正常,因此正确的随机多端口启动实例的方式应该是采用 server.port 为 0 的方式。当然,如果读者能够重写配置文件的解析方法,将实验一中的问题排除掉,那么您当我没说这句话23333
没有更多推荐了,SpringCloud实战小贴士:随机端口
太久没有更新,一时不知道该从哪儿开始,索性就从一个小技巧开始吧。
在之前的《Spring Cloud构建微服务架构》系列博文中,我们经常会需要启动多个实例的情况来测试注册中心、配置中心等基础设施的高可用,也会用来测试客户端负载均衡的调用等。但是,我们一个应用只能有一个端口号,这就使得在本机测试的时候,不得不为同一个服务设置不同的端口来进行启动。
在本地用不同端口启动同一服务实例的方法有很多。最传统的我们可以粗暴地修改配置文件中的server.port属性来分别启动多个实例,这种方法虽然可以实现,但是非常的不方便。比较好的一种方法是在启动的时候通过命令的方式为server.port属性来设置不同的值,这样我们的配置文件就不用反复的进行修改了。
在本文中,我们将介绍另外一种方法:采用随机端口的方式来设置各个服务实例,这样我们不用去编辑任何命令就可以在本地轻松地启动多个实例了。
使用随机端口
为Spring Cloud的应用实用随机端口非常简单,主要有两种方法:
设置server.port=0,当应用启动的时候会自动的分配一个随机端口,但是该方式在注册到Eureka的时候会一个问题:所有实例都使用了同样的实例名(如:Lenovo-zhaiyc:hello-service:0),这导致只出现了一个实例。所以,我们还需要修改实例ID的定义,让每个实例的ID不同,比如使用随机数来配置实例ID:
server.port=0
eureka.instance.instance-id=${spring.application.name}:${random.int}
除了上面的方法,实际上我们还可以直接使用random函数来配置server.port。这样就可以指定端口的取值范围,比如:
server.port=${random.int[]}
由于默认的实例ID会由server.port拼接,而此时server.port设置的随机值会重新取一次随机数,所以使用这种方法的时候不需要重新定义实例ID的规则就能产生不同的实例ID了。
没有更多推荐了,博客分类:
【视频&交流平台】
http://study.163.com/course/introduction.htm?courseId=&utm_campaign=commission&utm_source=061&utm_medium=share
http://study.163.com/course/introduction.htm?courseId=&utm_campaign=commission&utm_source=061&utm_medium=share
https://gitee.com/happyangellxq520/spring-boot
http://-qq-com.iteye.com/blog/2321532
原本这个章节是要介绍《log4j多环境不同日志级别的控制的》但是没有这篇文章做基础的话,学习起来还是有点难度的,所以我们先一起了解下spring boot属性文件之多环境配置,当然文章中也会提到属性文件基本的一些知识,然后慢慢在升华到多环境配置。
相信很多人选择Spring Boot主要是考虑到它既能兼顾Spring的强大功能,还能实现快速开发的便捷。我们在Spring Boot使用过程中,最直观的感受就是没有了原来自己整合Spring应用时繁多的XML配置内容,替代它的是在pom.xml中引入模块化的Starter POMs,其中各个模块都有自己的默认配置,所以如果不是特殊应用场景,就只需要在application.properties中完成一些属性配置就能开启各模块的应用。
在之前的各篇文章中都有提及关于application.properties的使用,主要用来配置数据库连接、日志相关配置等。除了这些配置内容之外,本文将具体介绍一些在application.properties配置中的其他特性和使用方法。
自定义属性与加载
这方面的知识我们在之前一篇文章
中就已经有介绍过了,这里也当做温故下吧,当然重点还是之后的多环境配置文件。
我们在使用Spring Boot的时候,通常也需要定义一些自己使用的属性,我们可以如下方式直接定义:
在src/main/resources/application.properties:加入:
#自定义属性.
=Spring Boot教程
然后通过@Value("${属性名}")注解来加载对应的配置属性,具体如下:
(以下这种方式已经过时了,不推荐使用,但能正常运行的)。
@Component
public class BlogProperties {
@Value("${com.kfit.blog.name}")
private String name;//博客作者
@Value("${com.kfit.blog.title}")
private String title;//博客标题
// 省略getter和setter
通过单元测试来验证BlogProperties中的属性是否已经根据配置文件加载了。
引入单元测试依赖:
&!-- spring boot 单元测试. --&
&dependency&
&groupId&org.springframework.boot&/groupId&
&artifactId&spring-boot-starter-test&/artifactId&
&scope&test&/scope&
&/dependency&
进行编码进行单元测试:
package com.
import org.junit.A
import org.junit.T
import org.junit.runner.RunW
import org.springframework.beans.factory.annotation.A
import org.springframework.boot.test.SpringApplicationC
import org.springframework.test.context.junit4.SpringJUnit4ClassR
import com.kfit.properties.BlogP
* @author Angel(QQ:)
* @version v.0.1
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(App.class)
public class AppTest{
@Autowired
private BlogProperties blogProperties;
public void testBlog() throws Exception {
System.out.println("AppTest.testBlog()="+blogProperties);
Assert.assertEquals("Angel",blogProperties.getName());
Assert.assertEquals("Spring Boot教程", blogProperties.getTitle());
运行单元测试,完美的看到我们想要的结果了,但是我们刚刚提到了BlogProperties写法已经不推荐使用了,那么怎么写会比较perfect呢?看如下优雅的编码风格:
先引入spring boot提供的一个配置依赖:
&!--spring boot 配置处理器 --&
&dependency&
&groupId&org.springframework.boot&/groupId&
&artifactId&spring-boot-configuration-processor&/artifactId&
&optional&true&/optional&
&/dependency&
在这里我们主要使用@ConfigurationProperties注解进行编码,
修改BlogProperties为:
* prefix="com.kfit.blog" :
* 在application.properties配置的属性前缀,
* 在类中的属性就不用使用{@value}进行注入了。
* @author Angel(QQ:)
* @version v.0.1
@ConfigurationProperties(prefix="com.kfit.blog")
public class BlogProperties {
private String name;//博客作者
private String title;//博客标题
// 省略getter和setter
在启动类中加入:@EnableConfigurationProperties({BlogProperties.class})
在运行单元测试还是能够正常进行的。
这种的好处就是只需要配置一个地方,其它地方就是正常定义类的属性即可了。
参数间的引用
在application.properties中的各个参数之间也可以直接引用来使用,就像下面的设置:
=${com.kfit.blog.name}正在写《${com.kfit.blog.title}》
com.kfit.blog.desc参数引用了上文中定义的name和title属性,最后该属性的值就是Angel正在努力写《Spring Boot教程》。
使用随机数
在一些情况下,有些参数我们需要希望它不是一个固定的值,比如密钥、服务端口等。Spring Boot的属性配置文件中可以通过${random}来产生int值、long值或者string字符串,来支持属性的随机值。
# 随机字符串
=${random.value}
=${random.int}
# 随机long
=${random.long}
# 10以内的随机数
=${random.int(10)}
# 10-20的随机数
=${random.int[10,20]}
通过命令行设置属性值
相信使用过一段时间Spring Boot的用户,一定知道这条命令:java -jar xxx.jar --server.port=8888,通过使用--server.port属性来设置xxx.jar应用的端口为8888。
在命令行运行时,连续的两个减号--就是对application.properties中的属性值进行赋值的标识。所以,java -jar xxx.jar --server.port=8888命令,等价于我们在application.properties中添加属性server.port=8888,该设置在样例工程中可见,读者可通过删除该值或使用命令行来设置该值来验证。
通过命令行来修改属性值固然提供了不错的便利性,但是通过命令行就能更改应用运行的参数,那岂不是很不安全?是的,所以Spring Boot也贴心的提供了屏蔽命令行访问属性的设置,只需要这句设置就能屏蔽:SpringApplication.setAddCommandLineProperties(false)。
在Eclipse中具体操作如下:
【右键工程】--【Run As】 -- 【Run configurations】--找到【Arguments】--【Program arguments】-- 添加【--server.port=8888】
多环境配置
以上都不是重点,这才是重点,这才是重点,这才是重点,重要的事情说3遍。我们在开发Spring Boot应用时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发、测试、生产等。其中每个环境的数据库地址、服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改配置文件的话,那必将是个非常繁琐且容易发生错误的事。
对于多环境的配置,各种项目构建工具或是框架的基本思路是一致的,通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后进行区分打包,Spring Boot也不例外,或者说更加简单。
在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:
application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境
至于哪个具体的配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应{profile}值。
如:spring.profiles.active=test就会加载application-test.properties配置文件内容
下面,以不同环境配置不同的服务端口为例,进行样例实验。
针对各环境新建不同的配置文件application-dev.properties、application-test.properties、application-prod.properties
在这三个文件均都设置不同的server.port属性,如:dev环境设置为8080,test环境设置为9090,prod环境设置为80
application.properties中设置spring.profiles.active=dev,就是说默认以dev环境设置
测试不同配置的加载:
执行java -jar xxx.jar,可以观察到服务端口被设置为8080,也就是默认的开发环境(dev)
执行java -jar xxx.jar --spring.profiles.active=test,可以观察到服务端口被设置为9090,也就是测试环境的配置(test)
执行java -jar xxx.jar --spring.profiles.active=prod,可以观察到服务端口被设置为80,也就是生产环境的配置(prod)
按照上面的实验,可以如下总结多环境的配置思路:
application.properties中配置通用内容,并设置spring.profiles.active=dev,以开发环境为默认配置
application-{profile}.properties中配置各个环境不同的内容
通过命令行方式去激活不同环境的配置。
多环境高级应用
在某些情况下,应用的某些业务逻辑可能需要有不同的实现。例如邮件服务,假设EmailService中包含的send(String email)方法向指定地址发送电子邮件,但是我们仅仅希望在生产环境中才执行真正发送邮件的代码,而开发环境里则不发送以免向用户发送无意义的垃圾邮件。
我们可以借助Spring的注解@Profile实现这样的功能,这样需要定义两个实现EmailService借口的类:
* 发送邮件接口.
* @author Angel(QQ:)
* @version v.0.1
public interface EmailService {
/**发送邮件*/
publicvoid send();
发送邮件的具体实现(dev-开发环境的代码):
@Profile("dev") //开发环境的时候.
public class DevEmailServiceImpl implements EmailService{
publicvoid send() {
System.out.println("DevEmailServiceImpl.send().开发环境不执行邮件的发送.");
发送邮件的具体实现(prod-生产环境的代码):
@Profile("prod") //生产环境.
public class ProdEmailServiceImpl2 implements EmailService{
publicvoid send() {
System.out.println("DevEmailServiceImpl.send().生产环境执行邮件的发送.");
//具体的邮件发送代码.
//mail.send();
@Profile("dev")表明只有Spring定义的Profile为dev时才会实例化DevEmailService这个类。那么如何设置Profile呢?
在配置文件中指定
在application.properties中加入:
spring.profiles.active=dev
通过命令行参数
java -jar app.jar --spring.profiles.active=dev
【Spring Boot 系列博客】
视频&交流平台:
http://study.163.com/course/introduction.htm?courseId=
http://-qq-com.iteye.com/blog/2321532
网易云课堂视频最新更新:
第十一章 Spring Boot 日志
1、spring boot日志—理论
2、Spring Boot日志-logback
3、Spring Boot日志-log4j2
第十二章 Spring Boot 知识点2
1、spring boot 服务配置和部署
2、Spring Boot 定制URL匹配规则
历史章节:
第一章 快速开始
1、Spring Boot之Hello World
2、Spring Boot之Hello World访问404
第二章 Spring Boot之JSON
1、spring boot返回json数据
2、Spring Boot完美使用FastJson解析JSON数据
第三章 Spring Boot热部署
1、Spring Boot热部署(springloader)
2、springboot + devtools(热部署)
第四章 Spring Boot数据库
1、Spring Boot JPA/Hibernate/Spring Data概念
2、Spring Boot JPA-Hibernate
3、Spring Boot Spring Data JPA介绍
4、Spring Boot JdbcTemplate
5、Spring Boot集成MyBatis
第五章 web开发
1、全局异常捕捉
2、配置server信息
3、spring boot使用thymeleaf
4、Spring Boot 使用freemarker
5、Spring Boot添加JSP支持
第六章 定时任务
1、Spring Boot定时任务
2、Spring Boot 定时任务升级篇(动态修改cron参数)
3、Spring Boot 定时任务升级篇(动态添加修改删除定时任务)
4、Spring Boot 定时任务升级篇(集群/分布式下的定时任务说明)
5、Spring Boot Quartz介绍
6、Spring Boot Quartz在Java Project中使用
7、Spring Boot 集成Quartz普通使用
8、Spring Boot 集成Quartz升级版
9、Spring Boot 集成Quartz二次升级版
10、Spring Boot 集成Quartz-Job如何自动注入Spring容器托管的对象
第七章 Spring Boot MyBatis升级篇
1、Spring Boot MyBatis升级篇-注解
2、Spring Boot MyBatis升级篇-注解-自增ID
3、Spring Boot MyBatis升级篇-注解-增删改查
4、Spring Boot MyBatis升级篇-注解-分页查询
5、Spring Boot MyBatis升级篇-注解-分页PageHelper不生效
6、Spring Boot MyBatis升级篇-注解- mybatic insert异常:BindingException: Parameter 'name' not found
7、Spring Boot MyBatis升级篇-注解- #和$符号特别篇
8、Spring Boot MyBatis升级篇-注解-@Result
9、Spring Boot MyBatis升级篇-注解-动态SQL(if test)-方案一:&script&
10、Spring Boot MyBatis升级篇-注解-动态SQL(if test)-方案二:@Provider
11、Spring Boot MyBatis升级篇-注解-动态SQL-参数问题
12、Spring Boot MyBatis升级篇-注解-特别篇:@MapperScan和@Mapper
13、Spring Boot MyBatis升级篇-XML
14、Spring Boot MyBatis升级篇-XML-自增ID
15、Spring Boot MyBatis升级篇-XML-增删改查
16、Spring Boot MyBatis升级篇-XML-分页查询
17、Spring Boot MyBatis升级篇-XML-分页PageHelper不生效
18、Spring Boot MyBatis升级篇-XML-动态SQL(if test)
19、Spring Boot MyBatis升级篇-XML-注解-初尝试
20、Spring Boot MyBatis升级篇- pagehelper替换为pagehelper-spring-boot-starter
第八章 Spring Boot 知识点1
1、Spring Boot 拦截器HandlerInterceptor
2、Spring Boot启动加载数据CommandLineRunner
3、Spring Boot环境变量读取和属性对象的绑定
4、Spring Boot使用自定义的properties
5、Spring Boot使用自定义的properties
6、Spring Boot使用@SpringBootApplication
7、Spring Boot 监控和管理生产环境
第十章 Spring Boot 打包部署
1、Spring Boot打包部署((提供Linux的sh文件))
第十一章 Spring Boot 日志
1、spring boot日志—理论
2、Spring Boot日志-logback
3、Spring Boot日志-log4j2
更多查看博客:
浏览 40889
论坛回复 /
(0 / 4462)
楼主,我查询了一下官方文档,@Profile只能用在Component和Configuration上,service注解上使用并不行,我自己的代码试过好像并不可以我这里很确认的告诉你,使用@Service注解是没有任何问题的,在看到你提出的疑问之后,我也写代码进行测试了,确实能够按照我们想要的进行运行。您在看看您的代码是否正常。
浏览: 2124189 次
林祥纤 写道恨灬rumor 写道registry.addRes ...
tzq668766 写道无意中发现有个中文版的springbo ...
无意中发现有个中文版的springboot banner在线生 ...
恨灬rumor 写道registry.addResourceH ...
joekey 写道老大,这里有一个问题,如果我一个Contro ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 springcloud 端口 的文章

 

随机推荐