admin管理员组

文章数量:1794759

springBoot常用注解【Mysql+ClickHouse】项目搭建

springBoot常用注解【Mysql+ClickHouse】项目搭建

springBoot 什么是SpringBoot?

springBoot就是用来简化Spring应用的初始搭建以及开发过程,让开发者不需要经过繁琐的配置就可以进行开发,可以将尽力关注与、于业务逻辑的框架。从根本上来讲,Spring Boot就是一些库的集合,它能够被任意项目的构建系统所使用。springBoot并不是一个全新的框架,他不是spring解决方案的一个替代品,而是spring的一个封装。所以,以前可以用spring做的事,springBoot都可以做。springBoot是一个非常好的微服务开发框架。

注解 Springboot中常用的注解 1.@RestController

它继承自@Controller注解,当实现一个Restful web services的时候,response将一直通过response body发送。

2.@RequestMapping

它是一个用来处理请求地址映射的注解,可以用于类上,表示类中的所有的响应请求的方法都是以该地址作为父路径。该注解有六个属性:

  • params:指定request中必须包含某些参数值时,才让该方法处理。
  • header:指定request中必须包含某些指定的header值,才能让该方法处理请求。
  • value:指定请求的实际地址,指定的地址可以是URL Template模式。
  • method:指定请求的method类型,GET/POST/PUT/DELETE。
  • consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html。
  • produce:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含了该指定类型才返回
  • 详细用例如下所示:

    @RequestMapping(value = "test") @RestController public class TestController { //测试springBoot项目启动 @RequestMapping(value = "hello") public String Test(){ return "你好啊!!!"; } }

    启动项目,一般默认端口号为8080,访问localhost(172.0.0.1):8080/test/hello结果如下所示:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mR8njNs0-1645511151234)(C:\\Users\\viruser.v-desktop\\AppData\\Roaming\\Typora\\typora-user-images\\image-20220222095512638.png)]

    3.@ResponseBody

    它表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常被解析为跳转路径,加上@ResponseBody后,会直接返回json数据。

    4.@RequestBody

    它将HTTP请求正文插入方法中,使用适合的HttpMessageConverter将请求体写入某个对象。

    5.@Service

    它一般用于修饰Service层的组件。

    6.@Data

    它用于实体类中get和set的方法的创建,用了它,就不用实现get和set方法了。

    7.@Component

    它泛指组件,当组件不好归类的时候,可以使用这个注解进行标注。放在类上,把普通类实例化到spring容器中。可以说很多注解都是基于这个注解的。

    8.@RequestParam

    用在方法前面的参数。

    9.@Transactional

    在spring容器中,我们手工注解@Bean将被优先加载,框架不会重新实例化其他的PlaformTransactionManager实现类。在Sercice中,被@Transactional注解的方法,将支持事务。如果注解在类上,则整个的所有方法都默认支持事务。

    10.@Bean

    用在方法上,用@Bean标注方法等价于xml中配置bean,这个方法一般返回一个实体对象,告诉spring这里产生一个对象,然后这个对象会交给spring管理。产生这个对象的方法Spring只会调用一次,随后这个spring将会将这个Bean对象放在自己的容器中。

    11.@Configuration

    标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。(靠@Component注解)。

    12.@ConfigurationProperties

    将配置文件的参数映射成一个对象,通过prefix来设定前缀,然后将后面的和对象的属性名一直就能实现注入(当然这个对象需要注入的属性需要提供get和set方法,因为spring底层其实就是通过反射调用该对象的set方法)。

    13.@value

    value的作用其实和ConfigurationProperties的作用差不多,就是读取的配置文件中参数的值,但是value是放在变量上面的,且是单值读取,而且value标注的变量并不需要和配置的文件的参数名字一致。

    14.@Resource

    按名称来注入的,当找不到与名称匹配的Bean才会按照类型来注入。其实平时用的都是它默认的方式,即都不指定名字和类型。spring通过反射机制使用byName方法自动注入。@Resource的装配顺序:

  • 如果同时指定了name属性和type属性,那么spring将从容器中找唯一匹配的bean进行装配,找不到则抛出异常。
  • 如果指定了name属性值,则从容器中查找名称匹配的Bean进行装配,找不到则抛出异常。
  • 如果指定了type属性值,则从容器中查找类型匹配唯一的Bean进行装配,找不到或者找到多个都会抛出异常。
  • 如果都不指定,则会自动按照ByName方式进行装配
  • 15.@Autowired

    它一般结合@ComponnetScan注解,来自动注入一个Service或Dao级别的Bean。默认是按照类型进行装配注入,如果允许null值,可以设置他required为false。即当不能确定Spring容器中一定拥有某个类的Bean时,可以在需要自动注入该类Bean的地方使用@Autowired(required = false)。

    16.@Qualifier

    @Autowired是根据类型进行自动装配的。如果当spring上下文中存在不只一个或存在多个该类型的Bean时,就会抛出一个BeanCreateException异常。针对存在多个该类型的Bean,可以联合使用@Qualifier和@Autowired。

    @Autowired @Qualifier("User") Private Usre user; 17.@SpringBootApplication

    这个注解就是集成了@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan这三个注解。其中@SpringBootConfiguration表示这个类为配置类,@EnableAutoConfiguration表示开启自动配置,@ComponentScan表示自动扫描,只能扫描同一级的目录。

    18.@EnableAutoConfigurationProperties

    将带有@ConfigurationProperties注解的类注入为Spring容器的Bean。如果使用了@ConfigurationProperties但是没有在启动类上增加这个注解,则@ConfigurationProperties将不起作用。

    19.@Async与@EnableAsync

    其中@Async表示这个方法是异步方法;@EnableAsync这个注解需要加在启动类上,表示支持异步操作;如果不加,则@Async将不起作用。通俗点可以将这个注解理解为另起了一个线程。

    20.@Scheduled与@EnableScheduled

    定时任务。同样,@EnableScheduled这个注解也需要加在启动类上,表示支持定时任务。

    21.@Primary

    在spring中使用注解,常使用@Autowired,默认是根据类型Type来自动注入的。但有些特殊的情况,对同一个接口,可能会有几种不同的实现类,而默认只会采取一种情况下@Primary的作用就起来了。当然也可以活用注解,个人原因是遇到了双数据源(mysql+ClickHouse)是需要配置一个默认数据源时使用,样例如下: application.yml配置数据

    spring: datasource: druid: #Mysql username: root password: **** url: jbbc:mysql://***/**?useUnicode=true$characterEncoding=utf-8&userSSL=true&serverTimezone=UTC type: com.alibaba.pool.DruidDataSource driverClassName: com.mysql.jdbc.Driver #ClickHouse click: dirverClassName: ru.yandex.clickhouse.ClickHouseDriver url: jdbc:clickhouse://***/** username: **** password: **** initialSize: 10 maxActive: 100 minIdle: 10 maxWait: 6000

    mysqlJdbcParamConfig配置如下:

    //通过@ConfigurationProperties获取application.yml中的配置信 @Data @Componet @ConfigurationProperties(prefix = "spring.datasource") public class MysqlJdbcParamConfig{ private String driverClassName; private String url; private String username; private String password; } //将上面的对象在容器中配置起来 @Configuration @MapperScan(basePackages = "上面对象的路径") public class MysqlDuridConfig{ @Autowired MysqlJdbcParamConfig mysqlJdbcParamConfig; @Bean("mysqlDataSource") @Primary public DataSource mysqlDataSource(){ DruidDataSource datasource = new DruidDataSource(); datasource.setUrl(mysqlJdbcParamConfig.getUrl()); datasource.setDriverClassName(mysqlJdbcParamConfig.getDriverClassName()); datasource.setUsername(mysqlJdbcParamConfig.getUsername()); datasource.setPassword(mysqlJdbcParamConfig.getPassword()); return datasource; } @Bean("mysqlTransactionManager") @Primary public DataSourceTransactionManager getDataSourceTransactionManager(@Qualifier("mysqlDataSource") DataSource dataSource){ return new DataSourceTransactionManager(dataSource); } @Bean("sqlSessionFactory") @Primary public SqlSessionFactory getSqlSessionManager(@Qualifier("mysqlDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); } }

    clickJdbcParamConfig配置如下:

    //通过@ConfigurationProperties获取application.yml中的配置信 @Data @Component @ConfigurationProperties(prefix = "spring.datasource.click") public class ClickHouseJdbcParamConfig { private String driverClassName; private String url; private String username; private String password; private Integer initialSize; private Integer maxActive; private Integer minIdle; private Integer maxWait; } //将上面的对象在容器中配置起来 @Configuration @ConfigurationProperties @MapperScan(basePackages = "com.hexin.clickhouseDemo.clickDao", sqlSessionFactoryRef = "clickHouseSqlSessionFactory") public class ClickHouseDruidCongfig { @Autowired ClickHouseJdbcParamConfig clickHouseJdbcParamConfig; @Bean("clickDataSource") public DataSource dataSource(){ DruidDataSource datasource = new DruidDataSource(); datasource.setUrl(clickHouseJdbcParamConfig.getUrl()); datasource.setDriverClassName(clickHouseJdbcParamConfig.getDriverClassName()); datasource.setUsername(clickHouseJdbcParamConfig.getUsername()); datasource.setInitialSize(clickHouseJdbcParamConfig.getInitialSize()); datasource.setMinIdle(clickHouseJdbcParamConfig.getMinIdle()); datasource.setMaxActive(clickHouseJdbcParamConfig.getMaxActive()); datasource.setMaxWait(clickHouseJdbcParamConfig.getMaxWait()); datasource.setPassword(clickHouseJdbcParamConfig.getPassword()); return datasource; } @Bean("clickTransactionManager") public DataSourceTransactionManager getDataSourceTransactionManager(@Qualifier("clickDataSource") DataSource dataSource){ return new DataSourceTransactionManager(dataSource); } @Bean("clickHouseSqlSessionFactory") public SqlSessionFactory getSqlSessionManager(@Qualifier("clickDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); } }

    本文标签: 注解常用项目SpringBootClickHouse