注意:会自动生成一个包含main函数的应用入口类
package cn.xinagxu.girl02; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Girl02Application { public static void main(String[] args) { SpringApplication.run(Girl02Application.class, args); } }
注意:创建好的springboot项目的pom.xml文件已经自动引入了两个依赖和一个插件
<?xml version="1.0" encoding="UTF-8"?> <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>cn.xinagxu</groupId> <artifactId>girl02</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>girl02</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.8.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
福利:SpringBoot项目脚手架 -> 点击前往
该脚手架包含的东西
》开发热部署
》日志文件配置;注意:日志文件配置在static中的logback-spring.xml,如果要使用将这个配置文件移动到resources目录下后进入该配置文件修改日志存放路径即可使用
》多环境配置;注意:默认使用的是开发环境
》数据库配置;注意:使用的mysql数据库
编写一个controller类,当前段请求为 http://127.0.0.1:8080/ 时以JSON格式放回 Hello World!
package cn.xinagxu.girl02.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @RequestMapping(value = "/") public String hello() { return "Hello World!"; } }
注意:@RestController = @Controller + @ResponseBody
1.2.1 直接在应用入口类中点击右键运行即可
1.2.2 利用maven启动
进入到项目的根目录后执行
mnv spring-boot:run
1.2.3 利用maven启动方式2
进入到醒目根目录
执行 mvn install 编译项目
再去到 target 目录下 cd target
注意:target目录存放的都是编译过后的文件
再利用 java -jar 项目名.jar
properties yml
配置上下文路径为 /girl02
配置端口为:8888
properties 配置
server.context-path=/girl02 server.port=8888
yml 配置
server: context-path: /girl port: 9999注意:yml的配置时冒号后面必须加一个空格;推荐使用yml格式的配置方式
在配置文件中配置变量以及变量值
在需要用到的地方引入这个属性,类似于从容器中引入对象一样
package cn.xinagxu.girl02.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; @RestController @Controller @ResponseBody public class HelloController { @Value("${character}") private String character; @Value("${age}") private Integer age; @Value("${content}") private String content; @RequestMapping(value = "/") public String hello() { return "Hello World!" + "性格:" + character + " 年龄:" + age + " 详细信息为:" + content; } }
编写一个实体类
package cn.xinagxu.girl02.entity; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "student") public class Student { private Integer id; private String name; private Integer age; public Student() { } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }
在配置文件中配置实体类的属性值
类似于给一个实体bean赋值
在用到的地方引入这个实体类
package cn.xinagxu.girl02.controller; import cn.xinagxu.girl02.entity.Student; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; @RestController @Controller @ResponseBody public class HelloController { @Value("${character}") private String character; @Value("${age}") private Integer age; @Value("${content}") private String content; @Autowired private Student student; @RequestMapping(value = "/") public String hello() { // return "Hello World!" + "性格:" + character + " 年龄:" + age + " 详细信息为:" + content; return student.toString(); } }
获取方式不变,但是如果使用new去创建工具实例,那么工具类中就不会获取到相关的配置文件信息;必须将配置类被容器管理,然后在需要使用配置类的地方依赖注入即可;否则读取到的配置信息全部都是null;参考博文
package cn.xiangxu.redis_demo.common.uitls; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import redis.clients.jedis.Jedis; /** * @author 王杨帅 * @create 2018-06-25 13:35 * @desc jedis客户端工具类 **/ @Component public class JedisClientUtil { @Value("${spring.redis.host}") private String host; @Value("${spring.redis.port}") private Integer port; private final byte[] temp_lock = new byte[1]; private Jedis jedis; public JedisClientUtil(){} public Jedis getRedisClient() { if (jedis == null) { synchronized (temp_lock) { if (jedis == null) { System.out.println(host); System.out.println(port); jedis = new Jedis(host,port); } } } return jedis; } }
package cn.xiangxu.redis_demo.web; import cn.xiangxu.redis_demo.common.uitls.JedisClientUtil; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; /** * @author 王杨帅 * @create 2018-06-25 13:35 * @desc Redis相关 **/ @RestController @RequestMapping(value = "/redis") @Slf4j public class RedisController { /** * 单例模式 */ @Test public void test01() { // 01 获取Jedis客户端【设置IP和端口】 Jedis jedis = new Jedis("192.168.233.134", 6379); // 02 保存数据 jedis.set("name", "王杨帅"); // 03 获取数据 String value = jedis.get("name"); System.out.println("获取到的数据为:" + value); String age = jedis.get("age"); System.out.println("获取到的年龄信息为:" + age); // 04 释放资源 jedis.close(); } /** * 使用连接池模式 */ @Test public void test02() { System.out.println("Hello Warrior"); // 01 获取连接池对象 JedisPoolConfig config = new JedisPoolConfig(); // 0101 最大连接数 config.setMaxTotal(30); // 0102 最大空闲连接数 config.setMaxIdle(10); // 02 获取连接池 JedisPool jedisPool = new JedisPool(config, "192.168.233.134", 6379); // 03 核心对象【获取Jedis客户端对象】 Jedis jedis = null; try { // 0301 通过连接池获取Jedis客户端 jedis = jedisPool.getResource(); // 0302 设置数据 jedis.set("name", "三少"); // 0303 获取数据 String value = jedis.get("name"); System.out.println(value); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } finally { if (jedis != null) { jedis.close(); } if (jedisPool != null) { jedisPool.close(); } } } @Autowired private JedisClientUtil jedisClientUtil; @GetMapping(value = "/connect") public void connect() { // JedisClientUtil jedisClientUtil = new JedisClientUtil(); Jedis jedis = jedisClientUtil.getRedisClient(); } }
注意:前面两个配置文件中配置的东西是公用的,后面两个中一个是开发环境,一个是生产环境
#server: # context-path: /girl # port: 9999 spring: profiles: active: prod character: 外向 age: 24 content: "性格:${character}, 年龄:${age}" student: id: 1 age: 24 naem: 三少
server: context-path: /girl port: 9999
server: context-path: /girl port: 8888
在IntelliJ IDEA中启动主配置中指定的那个环境
利用maven启动项目,并指定运行环境
java -jar 项目名.jar --spring.profiles.active=prod
注意:运行前需要编译项目然后进入到target文件夹中
Bean注入详解
在properties配置文件中配置一个自定义配置,例如
xiangxu.security.browser.loginPage = /demo-signIn.html该对象是用来保存properties配置文件中以 xiangxu.security开始的所有配置信息
技巧01:需要在该实体类上标注 @ConfigurationProperties(prefix = "xiangxu.security") 注解来声明该实体类是用来保存properties配置文件中以 xiangxu.security开始的所有配置信息
技巧02:该对象中有一个名为browser的实体属性,该属性是用来存放在properties文件中以browser开始的配置信息
技巧03:在properties文件中xiangxu.security的配置信息属性名必须和SecurityProperty对象的实例属性名保持一致
技巧04:如果给实体类的属性设定了默认值后,如果在配置文件中没有对应的配置就会使用属性对应的默认值作为默认配置
package com.example.wiremock.entity.properties; import org.springframework.boot.context.properties.ConfigurationProperties; /** * @author 王杨帅 * @create 2018-05-13 13:45 * @desc **/ @ConfigurationProperties(prefix = "xiangxu.security") public class SecurityProperty { private BrowserProperty browser; public BrowserProperty getBrowser() { return browser; } public void setBrowser(BrowserProperty browser) { this.browser = browser; } }
该对象是用来存放propertes文件中browser开始的配置信息
技巧01:properties配置文件中browser后面的属性名必须和实体类BrowserProperty的实例属性名一致
package com.example.wiremock.entity.properties; /** * @author 王杨帅 * @create 2018-05-13 13:46 * @desc **/ public class BrowserProperty { private String loginPage; public String getLoginPage() { return loginPage; } public void setLoginPage(String loginPage) { this.loginPage = loginPage; } }
创建一个配置类,来让我们定义的实体类和properties配置文件中的配置信息对应起来;这样我们只需要依赖注入我们创建的实体类SecurityProperty就可以读取到properties中的配置信息了
package com.example.wiremock.config; import com.example.wiremock.entity.properties.SecurityProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; @Configuration @EnableConfigurationProperties(SecurityProperty.class) public class PropertiesConfig { }
项目启动后依赖注入配置实体类后,就可以通过依赖注入的对象去获取到对应的propertes配置信息
package com.example.wiremock.controller; import com.example.wiremock.entity.properties.SecurityProperty; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.builder.ReflectionToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; /** * @author 王杨帅 * @create 2018-05-13 14:15 * @desc **/ @RunWith(SpringRunner.class) @SpringBootTest @Slf4j public class PropertiesTest { // 01 依赖注入配置实体类 @Autowired private SecurityProperty securityProperty; @Test public void test01() { log.info(ReflectionToStringBuilder.toString(securityProperty, ToStringStyle.MULTI_LINE_STYLE)); log.info(securityProperty.getBrowser().getLoginPage()); } }
公众号内有精彩内容,可以提现
原文链接:https://www.cnblogs.com/NeverCtrl-C/p/7688816.html#top