Spring Cloud入门2
我的开发环境
- jdk1.8
- maven3.5.0
- win7 64位
SpringBoot简介
- pivotal团队提供的全新的框架,其设计的目的是简化新Spring应用的初始化搭建以及开发过程,该框架使用了特定的方式进行配置,从而使开发人员不再需要定义样板话的配置,而且可以通过starter的方式轻松集成第三方的框架,去掉了XML的配置,全部用注解代替。
- 优点
- 基于Spring开发Web应用更加容易
- 采用基于注解方式的配置,避免了编写大量重复的XML配置
- 可以轻松集成Spring家族的其他框架
- 提供嵌入式服务器,令开发和部署变得非常方便
-
搭建SpringBoot的关键
-
pom.xml
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
-
main入口
@SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
-
控制类
@RestController public class HelloController { @GetMapping("/hello") public String hello() { return "hello"; } }
-
配置文件
-
Environment 的 getProperty 方法
@RestController public class HelloController { // 注入对象 @Autowired private Environment env; @GetMapping("/hello") public String hello() { // 读取配置 String port = env.getProperty("server.port"); return port; } }
-
@Value
@RestController public class HelloController { // 注入配置 @Value("${server.port}") private String port; @GetMapping("/hello") public String hello() { return port; } }
-
自定义配置类
@ConfigurationProperties(prefix = "net.biancheng") @Component public class MyConfig { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
@RestController public class HelloController { @Autowired private MyConfig myConfig; @GetMapping("/hello") public String hello() { return myConfig.getName(); } }
net.biancheng.name=zhangsan
-
-
-
SpringBoot多环境配置
- spring.profiles.active
- 热部署
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency>
- actuator监控【监控和管理自身应用信息的模块】
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
- 异步
- @Async【一定要在外部的类中去调用这个方法,如果在本类调用则不起作用】
-
随机端口
- server.port=${random.int[2000,8000]}
-
代码生产没有占用的端口
public class StartCommand { private Logger logger = LoggerFactory.getLogger(StartCommand.class); public StartCommand(String[] args) { Boolean isServerPort = false; String serverPort = ""; if (args != null) { for (String arg : args) { if (StringUtils.hasText(arg) && arg.startsWith("--server.port")) { isServerPort = true; serverPort = arg; break; } } } // 没有指定端口, 则随机生成一个可用的端口 if (!isServerPort) { int port = ServerPortUtils.getAvailablePort(); logger.info("current server.port=" + port); System.setProperty("server.port", String.valueOf(port)); } else { logger.info("current server.port=" + serverPort.split("=")[1]); System.setProperty("server.port", serverPort.split("=")[1]); } } }
public static int getAvailablePort() { int max = 65535; int min = 2000; Random random = new Random(); int port = random.nextInt(max)%(max-min+1) + min; boolean using = NetUtils.isLoclePortUsing(port); if (using) { return getAvailablePort(); } else { return port; } }
-
编译打包
<build> <plugins> <!-- 打包插件 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> <mainClass>net.biancheng.spring_boot_example.App</mainClass> </configuration> </plugin> <!-- 编译插件, 指定JDK版本 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>
- 启动执行
- java–jar xx.jar
- 启动执行