@EnableAutoConfiguration(exclude={SolrAutoConfiguration.class,MongoAutoConfiguration.class})
@EnableAutoConfiguration注解是开启自动配置,在springboot中,spring-boot-autoconfigure-1.5.6.RELEASE.jar是默认配置的jar,这个jar包中,拥有很多的配置对象。在springboot的启动类前加上该注解springboot就会自动配置所需的对象。如果不要希望springboot自动配置某些有对象时,可以使用"exclude"属性来排除掉不希望自动配置的对象。
@ComponentScan("com.yunxiang.controller")
@ComponentScan
@ComponentScan注解表示指定springboot启动类在启动时,要进行扫描的包,如果没有指明要扫描的包时,springboot的启动类,在启动时,默认扫描当前包及当前包的所有子包;如果指明要扫描的包时,springboot的启动类,在启动时,只扫描指定包及指定包的子包。
@EnableAsync
@EnableAsync注解表示springboot启动类开启异步调用。
注:以上四个注解只能使用在springboot的启动类上。
springboot的启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
//@EnableAutoConfiguration
//@ComponentScan("com.yunxiang.controller")
@SpringBootApplication(scanBasePackages={"com.yunxiang"})
public class SpringApplications {
//springboot的入口
public static void main(String[] args) {
/*
* 第一个参数,springboot入口所在类的字节码(即当前类的字节码)
* 第二个参数,就是字符串数组的参数名
*/
SpringApplication.run(SpringApplications.class, args);
}
}
@SpringBootApplication(scanBasePackages={"com.yunxiang"},exclude={SolrAutoConfiguration.class,MongoAutoConfiguration.class})
@SpringBootApplication注解是@EnableAutoConfiguration和@ComponentScan的组合键,他拥有@EnableAutoConfiguration和@ComponentScan的所有功能。
@RestController
@RestController注解只能修改类(Controller层中的类),表示该类的所有结果都是Restful内容(即将所有的结果一json格式返回),即该注解的作用相当于在每个方法上都添加了@ResponseBody。
@ConfigurationProperties(prefix="book")
@Controller
public class IndexController {
private String author;
private String name;
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
application.properties
book.author=zhangsan
book.name=spring
@ConfigurationProperties注解可以有@Value的功能,只是@Value注解需要写在每个注入常量的上面,@ConfigurationProperties注解值需要写在类的什么,并且需要给他指明一个前置,并且每个注入对象都要有get和set方法。
@MapperScan("com.yunxiang.mapper")
@MapperScan注解用于扫描接口类对象(“mapper.java”)。
@Configuration
@Configuration注解可理解为用spring的时候xml里面的<beans>标签,可以达到在Spring中使用xml配置文件的作用。
@bean
@Bean可理解为用spring的时候xml里面的<bean>标签,使用该注解常用在类对象上,表示该类对象创建成功后,将类对象放入spring容器中。
@ControllerAdvice
@ControllerAdvice注解是Controller层的行为通知,当使用@ExceptionHandler、@InitBinder、@ModelAttribute注解时,必须在类前面使用@ControllerAdvice注解。
@ExceptionHandler(Exception.class)
@ExceptionHandler用于声明进行全局异常处理的方法。
@Async
@Override
public Future<String> doTest3() throws Exception {
System.out.println("任务三开始执行");
long startTime = System.currentTimeMillis();
Thread.sleep(random.nextInt(10000));
long endTime = System.currentTimeMillis();
System.out.println("任务三结束,耗时:"+(endTime - startTime)+"毫秒");
return new AsyncResult<String>("任务三结束");
}
@Async注解常用在方法上,表示在执行该方法时使用多线程,即在开启一个新的线程来执行该方法。
@EnableScheduling
@EnableScheduling注解只能修饰在springboot的启动类,表示启动任务调度。
@Scheduled
@Scheduled注解表示用来配置到方法上来完成对应的定时任务的配置,如执行时间,间隔时间,延迟时间等等。详解见"https://www.jianshu.com/p/88125f1cf91c"
@Insert("insert into user(name, sex,address,brithday) values(#{user.name},#{user.sex},#{user.address},#{user.brithday})")
void addUser(@Param("user")User user);
@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中
@Primary
@Primary注解在当一个接口有2个不同实现时,使用该注解修修饰的那个接口实现类可以默认优先选择
@Configuration
@Configuration注解常用于修饰类对象。表示该类对象相当于是一个".xml"配置文件。
@EnableJpaRepositories("com.yunxiang.dao")
在springboot整合JPA-Hibernate中,使用"@EnableJpaRepositories(“com.yunxiang.dao”)"注解来扫描dao层对象,因为"JPA-Hibernate"的dao层对象继承了"JpaRepository"类,在dao层对象中并没有定义方法,所有操作数据库的方法都是"JpaRepository"的方法。
@EntityScan("com.yunxiang.pojo")
在springboot整合JPA-Hibernate中,"@EntityScan(“com.yunxiang.pojo”)"注解用来扫描pojo层的pojo对象,因为"JPA-Hibernate"中可以根据pojo对象直接在数据库中创建对应的数据表。
JPA-Hibernate的pojo对象实例
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity(name="user")
@Table(name="user")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Column(name="username")
private String name;
private Date brithday;
private String sex;
private String address;
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 Date getBrithday() {
return brithday;
}
public void setBrithday(Date brithday) {
this.brithday = brithday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
@Entity(name="user")
//可以不写此参数
@Table(name="user")
@Entity(name=“user”)注解表示pojo类对象与数据库中的数据表的映射关系,“name"属性的值,就是数据库中的表名,如果不写此参数,表示该类映射到数据库中以类名为名的数据表,如果没有该数据表,数据库会自动创建;”@Table(name=“user”)" 当实体类与其映射的数据库表名不同名时,需要使用。此外,当实体类与其映射的数据库表名不同名时,可以使用"@Entity"注解的"name"属性类指明映射关系,此时,就不需要"@Table"注解。
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
“@Id"注解表示他修饰的属性为数据表中的主键,”@GeneratedValue"注解表示主键的生成策略,他有一下几个属性:
TABLE:使用一个特定的数据库表格来保存主键。
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
IDENTITY:主键由数据库自动生成(主要是自动增长型)
AUTO:主键由程序控制。
@Column(name="username")
@Column注释定义了将成员属性映射到关系表中的哪一列和该列的结构信息,他有一下属性:
name:映射的列名。如:映射tbl_user表的name列,可以在name属性的上面或getName方法上面加入;
unique:是否唯一;
nullable:是否允许为空;
length:对于字符型列,length属性指定列的最大字符长度;
insertable:是否允许插入;
updatetable:是否允许更新;
columnDefinition:定义建表时创建此列的DDL;
secondaryTable:从表名。如果此列不建在主表上(默认是主表),该属性定义该列所在从表的名字。
@JsonFormat注解可以用来接受Date类型数据
pattern:日期的转换形式;
timezone:时区
public class Student {
private Integer id;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
private Date birthTime;
private String name;
private String ages;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Date getBirthTime() {
return birthTime;
}
public void setBirthTime(Date birthTime) {
this.birthTime = birthTime;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAges() {
return ages;
}
public void setAges(String ages) {
this.ages = ages;
}
}
@ConditionalOnMissingBean
该注解在初始化@Bean时,会先查看spring仓库中是否存在该类型的对象,如果存在,则不初始化该对象,如果不存在,就初始化该对象。