Spring Cloud入门2

Spring Cloud入门2

我的开发环境

  • jdk1.8
  • maven3.5.0
  • win7 64位

SpringBoot简介

  • pivotal团队提供的全新的框架,其设计的目的是简化新Spring应用的初始化搭建以及开发过程,该框架使用了特定的方式进行配置,从而使开发人员不再需要定义样板话的配置,而且可以通过starter的方式轻松集成第三方的框架,去掉了XML的配置,全部用注解代替。
  • 优点
    1. 基于Spring开发Web应用更加容易
    2. 采用基于注解方式的配置,避免了编写大量重复的XML配置
    3. 可以轻松集成Spring家族的其他框架
    4. 提供嵌入式服务器,令开发和部署变得非常方便
  • 搭建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";
          }
      }
      
    • 配置文件

      1. Environment 的 getProperty 方法

        @RestController
        public class HelloController {
        
            // 注入对象
            @Autowired
            private Environment env;
        
            @GetMapping("/hello")
            public String hello() {
                // 读取配置
                String port = env.getProperty("server.port");
                return port;
            }
        }
        
      2. @Value

        @RestController
        public class HelloController {
        
            // 注入配置
            @Value("${server.port}")
            private String port;
        
            @GetMapping("/hello")
            public String hello() {
                return port;
            }
        }
        
      3. 自定义配置类

        @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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值