Spring Boot Annotation

@EnableAutoConfiguration

@SpringBootApplication

等价 @Configuration,@EnableAutoConfiguration和@ComponentScan

@SpringBootTest

参数webEnvironment有四种配置

  • MOCK
    Creates a WebApplicationContext with a mock servlet environment or a regular ApplicationContext if servlet APIs are not on the classpath.

  • RANDOM_PORT
    Creates an EmbeddedWebApplicationContext and sets a server.port=0 Environment property (which usually triggers listening on a random port). Often used in conjunction with a LocalServerPort injected field on the test.

  • DEFINED_PORT
    Creates an EmbeddedWebApplicationContext without defining any server.port=0 Environment property.
    (application.properties配置端口或者默认端口8080)

  • NONE
    Creates an ApplicationContext and sets SpringApplication.setWebEnvironment(boolean) to false.

@SpringRunner

SpringRunner是SpringJUnit4ClassRunner

1
public final class SpringRunner extends SpringJUnit4ClassRunner

@Transactional

@Transactional(propagation=Propagation.REQUIRED)//如果有事务,那么加入事务,没有的话新创建一个

@Transactional(propagation=Propagation.NOT_SUPPORTED)//这个方法不开启事务

@Transactional(propagation=Propagation.REQUIREDS_NEW)//不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务

@Transactional(propagation=Propagation.MANDATORY)//必须在一个已有的事务中执行,否则抛出异常

@Transactional(propagation=Propagation.NEVER)//不能在一个事务中执行,就是当前必须没有事务,否则抛出异常

@Transactional(propagation=Propagation.SUPPORTS)//其他bean调用这个方法,如果在其他bean中声明了事务,就是用事务。没有声明,就不用事务。

@Transactional(propagation=Propagation.NESTED)//如果一个活动的事务存在,则运行在一个嵌套的事务中,如果没有活动的事务,则按照REQUIRED属性执行,它使用一个单独的事务。这个书屋拥有多个回滚的保存点,内部事务的回滚不会对外部事务造成影响,它只对DataSource TransactionManager事务管理器起效。

@Transactional(propagation=Propagation.REQUIRED,readOnly=true)//只读,不能更新,删除

@Transactional(propagation=Propagation.REQUIRED,timeout=30)//超时30秒

@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT)//数据库隔离级别

@PostConstruct

@ConditionalOnProperty

这个注解能够控制某个configuration是否生效。

具体操作是通过其两个属性name以及havingValue来实现的,其中name用来从application.properties中读取某个属性值,如果该值为空,
则返回false;如果值不为空,则将该值与havingValue指定的值进行比较,如果一样则返回true;否则返回false。如果返回值为false,则该
configuration不生效;为true则生效。

单元测试里面控制方式

1
@TestPropertySource(properties = "key=value")

@Autowire

  1. 有参构造使用@Value(“default value”)
1
2
3
4
5
6
7
@Component
class Disruptor(
@Value(DisruptorConfig.bufferSize.toString())
bufferSize: Int,
@Value("true")
initEventHandle: Boolean
)
  1. 多个bean,使用@Qualifier