Spring Boot入门笔记
前提:知道SSM,知道maven,开发过项目
1.IDEA创建springboot项目
- 如果你是首次打开idea,点击小窗口中的,create new project创建新项目(图示略)
- 如果你的idea是打开项目的状态,直接点击左上角File-New-Project创建新项目
如上步骤,会打开一个窗口:
然后选择如下:有的idea Default没有,填写上那个https://start.sprong.io 即可
注意:我用的是jdk1.8,(idea高版本,选择的时候貌似不能选择1.8之前的版本,所以先搞个1.8用着,学习springboot不影响)
选择好后点击Next
选择好后点击Next
然后Next,
Finish即可
如果maven配置的是阿里云的仓库会快一点,当然第一次,会下载很多jar包耐心等待即可
等项目创建完成:目录结构是这样的(我的截图少了三个文件,mvn开头的,因为不需要所以删了)
里面的目录和文件
其中这个就是启动springboot用的,可以看到有main方法
到这里springboot项目就创建完成了
2.启动springboot
启动springboot有三种方法,(如果报错请检查端口号是否被占用,启动项目默认端口号8080,修改端口号下面说)
- 直接运行main方法,右键main方法或右上角或左下角点击按钮启动项目
- 打开命令行(idea自带有Terminal),在项目根目录下用mvn spring-boot:run启动项目
- 打开命令行(idea自带有Terminal),在项目根目录下用mvn install编译项目,然后进入target目录,启动.jar的文件,用 java -jar 文件名.jar 启动项目
3.例子:
这里写一个例子:
写完后启动项目:
在浏览器上访问项目localhost:8080/hello
如果输出有,就ok了
4.配置文件
(1)示例
如果你的application.properties还没改回来,配置文件是这样写的:
- 示例:
server.port=8081
server.context-path=/springbootdemo
如果你的application.properties已经改为application.yml,配置文件是这样写的:
- 示例:
server:
port: 8081
context-path: /springbootdemo
这时候再次启动项目,
访问路径就变成了: localhost:8081/springbootdemo/hello
(2)注意
springboot用.yml配置文件
需要注意的是,例如port: 和8080之间有个空格,context-path:和 /springbootdemo之间有个空格
server:
port: 8081
context-path: /springbootdemo
(3)写配置文件并使用
例子1:
在application.yml中定义一个,gender和age
server:
port: 8081
context-path: /springbootdemo
gender: "男"
age: 18
使用就是
浏览器测试:
例子2:
配置文件:
server:
port: 8081
context-path: /springbootdemo
name: "张三"
gender: "男"
age: 18
content: "name:${name},gender:${gender},age:${age}"
然后代码引入:
浏览器访问:
例子3:
如果有很多属性,不能那么写了,于是简化例子2:
server:
port: 8081
context-path: /springbootdemo
person:
name: "张三"
gender: "男"
age: 18
新建一个类
这里我出现一个错误,百度出如下结果
1.出现spring boot Configuration Annotation Proessor not found in classpath的提示是在用了@ConfigurationProperties这个注解时,所以问题出现在ConfigurationProperties注解。
2.根据提示的not found in classpath,查询此注解的使用关于怎么指定classpath,进而查询location,spring boot1.5以上版本@ConfigurationProperties取消location注解
官方解决方案,Maven引入依赖
<dependency>
<groupId> org.springframework.boot </groupId>
<artifactId> spring-boot-configuration-processor </artifactId>
<optional> true </optional>
</dependency>
于是我添加到pom文件中,错误消失
然后改代码
测试:
5.两个配置文件
有的时候开发环境和生产环境,配置不一样,这时可以将配置文件分为两个,然后选择其中一个用即可,复制两个配置文件,在主配置文件中引用即可
还有一个方法可以直接,启动项目的时候选择配置文件,
mvn install
java -jar 文件名.jar –spring.profiles.active=prod
上面后面可以带参数,这时候用的就是application-prod.yml
如果两个配置文件端口号不一样,可以用两个方法启动两个项目
6.使用过的注解说明
●
@SpringBootApplication // 这是一个组合注解
之前用户使用的是3个注解注解他们的main类。分别是@Configuration,@EnableAutoConfiguration,@ComponentScan。由于这些注解一般都是一起使用,spring boot提供了一个统一的注解@SpringBootApplication。
@SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan。
@SpringBootApplication
public class ApplicationMain {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
分开解释@Configuration,@EnableAutoConfiguration,@ComponentScan。
1、@Configuration:提到@Configuration就要提到他的搭档@Bean。使用这两个注解就可以创建一个简单的spring配置类,可以用来替代相应的xml配置文件。
<beans>
<bean id = "car" class="com.test.Car">
<property name="wheel" ref = "wheel"></property>
</bean>
<bean id = "wheel" class="com.test.Wheel"></bean>
</beans>
相当于:
@Configuration
public class Conf {
@Bean
public Car car() {
Car car = new Car();
car.setWheel(wheel());
return car;
}
@Bean
public Wheel wheel() {
return new Wheel();
}
}
@Configuration的注解类标识这个类可以使用Spring IoC容器作为bean定义的来源。@Bean注解告诉Spring,一个带有@Bean的注解方法将返回一个对象,该对象应该被注册为在Spring应用程序上下文中的bean。
2、@EnableAutoConfiguration:能够自动配置spring的上下文,试图猜测和配置你想要的bean类,通常会自动根据你的类路径和你的bean定义自动配置。
3、@ComponentScan:会自动扫描指定包下的全部标有@Component的类,并注册成bean,当然包括@Component下的子注解@Service,@Repository,@Controller。
●
@Value
为了简化读取properties文件中的配置值,spring支持@value注解的方式来获取,这种方式大大简化了项目配置,提高业务中的灵活性。
两种使用方法
1、@Value(“#{configProperties[‘key’]}”)
这种形式的配置中有“configProperties”,其实它指定的是配置文件的加载对象
2、@Value(“${key}”)
这种形式不需要指定具体加载对象,这时候需要一个关键的对象来完成PreferencesPlaceholderConfigurer
●
@Componen
因为在持久层、业务层和控制层中,分别采用@Repository、@Service和@Controller对分层中的类进行注释,而用@Component对那些比较中立的类进行注释。
spring注解中@component就是说把这个类交给Spring管理,因为不清楚这个类是属于哪个层面,所以就用@Component。
●
@Controller // 处理http请求
@RestController // Spring4之后新加的注解,原来返回json需要@ResponseBody配合@Controller
@RequestMapping // 配置url映射
●
@Autowired
@Autowired是一种函数,可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作,@Autowired标注可以放在成员变量上,也可以放在成员变量的set方法上。
这里必须明确:@Autowired是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier使用。
这个注解就是spring可以自动帮你把bean里面引用的对象的setter/getter方法省略,它会自动帮你set/get。
●
@ConfigurationProperties
@ConfigurationProperties的大致作用就是通过它可以把properties或者yml配置直接转成对象
因为刚刚查到:
spring boot1.5以上版本@ConfigurationProperties取消location注解
所以请自行百度更多替代方案
●
其他注解
@PathVariable // 获取url中的数据
@RequestParam // 获取请求参数的值
@GetMapping // 组合注解,省略了method = RequestMethod.GET
@PostMapping // 组合注解,method = RequestMethod.POST
@PathVariable 在我看来就是方便restful结构
@RequestParam 这个参数传递使用,多参数也适用
7.Spring Boot 打包发布
- 打成jar包
mvn -Dmaven.test.skip -U clean package
运行jar包
java -jar 文件名.jar
- 打成war包
将pom.xml中的packageing值(默认:jar)改为war
<packaging>war</packaging>
在src——》main中新建
webapp——》WEB-INF——》web.xml
然后打包:
mvn -Dmaven.test.skip -U clean package
运行war包:
java -jar 文件名.war
war包也可以放到tomcat里面