spring boot 学习

菜鸟刚接触spring boot


今天学了spring boot 算是一个入门吧。

用ldea 新建一个spring boot项目:Flie --- New Project-----

如果spring initializr没有出现 说明你插件没装,需要在setting---plugins中安装spring的插件(应该是 spring boot插件),

接下去基本上就是next。。。。 新建完之后需要配置resources下的application(支持properties和yml),由于spring boot内置tomcat。所以只需要配置端口即可,



1、sping boot热部署

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-devtools</artifactId>
   <optional>true</optional><!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖myboot项目的项目如果想要使用devtools,需要重新引入 -->
</dependency>


setting---》build,execution---》勾选build project,然后shift+ctrl+alt+/----》respro

勾选 xxxxxxx.app.running

这样就可以了。

2、spring boot 使用thymeleaf模板

<!--thymeleaf模板-->
<!--<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>-->
thymeleaf:
  cache: false
  encoding: UTF-8
  mode: HTML5
  prefix: classpath:/templates/
  suffix: .html


这样就可以了,注意thymeleaf标签,这个很重要

http://www.open-open.com/lib/view/open1383622135586.html

http://www.cnblogs.com/nuoyiamy/p/5591559.html

<input type="radio" name="isusecookie" value="0"  th:checked="${rule.isusecookie == 0}" />

找了好久

3.spring boot 使用jsp

<dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>jstl</artifactId>
</dependency>
<dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
   <groupId>org.apache.tomcat.embed</groupId>
   <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

mvc:
  view:
    prefix: /WEB-INF/jsp/
    suffix: .jsp

在main下新建webapp/WEB-INF/JSP文件夹

注意,这个webapp要和resources同级目录,不然会报404。还有,不能有@EnableWebMVC注解,有这个注解的话会报找不到视图的错。

4、spring boot使用pageHelper

  <!--pageHelper插件-->
<dependency>
   <groupId>com.github.pagehelper</groupId>
   <artifactId>pagehelper-spring-boot-starter</artifactId>
   <version>1.1.1</version>
</dependency>
pagehelper:
  reasonable: true
  support-methods-arguments: true
  params: count=countSql
  helper-dialect: mysql

@RequestMapping("/demo/page")
@ResponseBody
public PageInfo<Rule> page(){
    PageHelper.startPage(1, 10);
    List<Rule> rules = ruleService.getAll();
    PageInfo<Rule> pageInfo = new PageInfo<>(rules);

    return pageInfo;
}

但是,这个pagehelper是不能用@antowire注入的,会报错,我觉得应该需要加这个配置

相当于讲pagehelper注入spring容器中。

5、spring boot使用generator插件生成model mapper

<plugin>
   <groupId>org.mybatis.generator</groupId>
   <artifactId>mybatis-generator-maven-plugin</artifactId>
   <version>1.3.5</version>
   <dependencies>
      <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version> 5.1.39</version>
      </dependency>
      <dependency>
         <groupId>org.mybatis.generator</groupId>
         <artifactId>mybatis-generator-core</artifactId>
         <version>1.3.5</version>
      </dependency>
   </dependencies>
   <executions>
      <execution>
         <id>Generate MyBatis Artifacts</id>
         <phase>package</phase>
         <goals>
            <goal>generate</goal>
         </goals>
      </execution>
   </executions>
   <configuration>
      <verbose>true</verbose>
      <overwrite>true</overwrite>
   </configuration>
</plugin>

 generatorConfig.xml在resources目录下。

双击maven project 的generator插件就可以生成。注意这里的配置,可以让RuleExample不生成

看http://blog.csdn.net/u011493599/article/details/53928379


6、spring boot整合mybatis


<dependency>
   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>1.2.0</version>
</dependency>
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
</dependency>
mybatis:
  type-aliases-package: com.hgh.spingbootdemo.entity
  mapper-locations: classpath:mapper/*.xml
这样就可以用了。

7、spring boot使用druid数据源

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid</artifactId>
   <version>1.0.18</version>
</dependency>

@Configuration
public class DruidDBConfig {

  //  private Logger logger = LoggerFactory.getLogger(DruidDBConfig.class);
    @Value("${spring.datasource.url}")
    private String dbUrl;
    @Value("${spring.datasource.username}") // 这是从application.yml中读取的
    private String username;
    @Value("${spring.datasource.password}")
    private String password;
    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;
    @Value("${spring.datasource.filters}")
    private String filters;
    @Value("${spring.datasource.maxActive}")
    private int maxActive;
    @Value("${spring.datasource.initialSize}")
    private int initialSize;
    @Value("${spring.datasource.minIdle}")
    private int minIdle;
    @Value("${spring.datasource.maxWait}")
    private int maxWait;
    @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
    private int timeBetweenEvictionRunsMillis;
    @Value("${spring.datasource.minEvictableIdleTimeMillis}")
    private int minEvictableIdleTimeMillis;
    @Value("${spring.datasource.validationQuery}")
    private String validationQuery;
    @Value("${spring.datasource.testWhileIdle}")
    private boolean testWhileIdle;
    @Value("${spring.datasource.testOnBorrow}")
    private boolean testOnBorrow;
    @Value("${spring.datasource.testOnReturn}")
    private boolean testOnReturn;
    @Value("${spring.datasource.poolPreparedStatements}")
    private boolean poolPreparedStatements;
    @Value("${spring.datasource.maxOpenPreparedStatements}")
    private int maxOpenPreparedStatements;

    @Bean(value = "dataSource")
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(dbUrl);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setDriverClassName(driverClassName);
        dataSource.setInitialSize(initialSize);
        dataSource.setMinIdle(minIdle);
        dataSource.setMaxActive(maxActive);
        dataSource.setMaxWait(maxWait);
        dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
        dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
        dataSource.setValidationQuery(validationQuery);
        dataSource.setTestWhileIdle(testWhileIdle);
        dataSource.setTestOnBorrow(testOnBorrow);
        dataSource.setTestOnReturn(testOnReturn);
        dataSource.setPoolPreparedStatements(poolPreparedStatements);
        dataSource.setMaxOpenPreparedStatements(maxOpenPreparedStatements);
        try {
            dataSource.setFilters(filters);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return dataSource;
    }
}

这个是给druid配置属性,然后将druid注入spring。


8、spring boot使用redis

引入依赖:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置redis属性:

# REDIS (RedisProperties)
# Redis数据库索引(默认为0spring.redis.database=0
# Redis服务器地址
spring.redis.host=192.168.111.128
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0

redis有2个模板

@Autowired
private StringRedisTemplate stringRedisTemplate;

@Autowired
private RedisTemplate redisTemplate;
StringRedisTemplate相当于 RedisTemplate的实现,只能用String类型存入redis。

如果想要将对象存入redis,需要实现序列化接口,用hashSet存,存的方式是用二进制数据存。

也可以参照http://blog.didispace.com/springbootredis/ 这样 不过,我没试过


9、Spring boot开启定时调度任务

@EnableScheduling 开启定时调度,然后@Scheduled(fixedRate=5000)就可以开启定时任务了,应该和spring的@Scheduled是一样的


10、Spring boot开启异步任务

APPlication上加上@EnableAsync

定义Task

@Component
public class Task {

    public static Random random =new Random();

    @Async
    public Future<String> doTaskOne() throws Exception {
        System.out.println("开始做任务一");
        long start = System.currentTimeMillis();
        Thread.sleep(random.nextInt(10000));
        long end = System.currentTimeMillis();
        System.out.println("完成任务一,耗时:" + (end - start) + "毫秒");
        return new AsyncResult<>("任务一完成");
    }

    @Async
    public Future<String> doTaskTwo() throws Exception {
        System.out.println("开始做任务二");
        long start = System.currentTimeMillis();
        Thread.sleep(random.nextInt(10000));
        long end = System.currentTimeMillis();
        System.out.println("完成任务二,耗时:" + (end - start) + "毫秒");
        return new AsyncResult<>("任务二完成");
    }

    @Async
    public Future<String> doTaskThree() throws Exception {
        System.out.println("开始做任务三");
        long start = System.currentTimeMillis();
        Thread.sleep(random.nextInt(10000));
        long end = System.currentTimeMillis();
        System.out.println("完成任务三,耗时:" + (end - start) + "毫秒");
        return new AsyncResult<>("任务三完成");
    }
}

然后开启Task即可。

11、Spring boot使用缓存

(1)用Ecache做缓存

添加依赖

 
 
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
需要在resources目录下新建一个ehcache.xml文件

 
 
<ehcache xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation= "ehcache.xsd" >
<cache name= "users"
maxEntriesLocalHeap= "200"
timeToLiveSeconds= "600" >
</cache>
</ehcache>
Application上添加@EnableCaching注解


 
 
@CacheConfig ( cacheNames = "users" )
public interface UserRepository extends JpaRepository < User , Long > {
@Cacheable ( key = "#p0" , condition = "#p0.length() < 10" )
User findByName ( String name );
}
加上@CacheConfig,@Cacheable注解即可

这些注解可以看 http://blog.csdn.net/poorcoder_/article/details/55258253

(2)使用redis做缓存

添加依赖:

 
 
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
配置redis属性:

 
 
spring.datasource.url = jdbc:mysql://localhost:3306/test
spring.datasource.username = root
spring.datasource.password = 123456
spring.datasource.driver-class-name = com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto = create-drop
spring.jpa.properties.hibernate.show_sql = true
spring.redis.host = localhost
spring.redis.port = 6379
spring.redis.pool.max-idle = 8
spring.redis.pool.min-idle = 0
spring.redis.pool.max-active = 8
spring.redis.pool.max-wait = -1
Application上添加 @EnableCaching注解

UserRepository 同上

注意:

spring boot 使用redis做缓存和用EhCache做缓存的区别:

1、EhCache做缓存需要在resources下新建ehcache.xml,pom.xml中加入ehcache包、spring-boot-start-cache包。而redis不需要ehcache.xml,pom.xml中加入spring-boot-starter-data-redis包。

2. EhCache做缓存如果更新之后,再次查询值会变,但是redis不会变。

原因:在EhCache缓存时没有问题,主要是由于EhCache是进程内的缓存框架,第一次通过select查询出的结果被加入到EhCache缓存中,第二次查询从EhCache取出的对象与第一次查询对象实际上是同一个对象(可以在使用Chapter4-4-1工程中,观察u1==u2来看看是否是同一个对象),因此我们在更新age的时候,实际已经更新了EhCache中的缓存对象。

 

而Redis的缓存独立存在于我们的Spring应用之外,我们对数据库中数据做了更新操作之后,没有通知Redis去更新相应的内容,因此我们取到了缓存中未修改的数据,导致了数据库与缓存中数据的不一致。

 

虽然EhCache已经能够适用很多应用场景,但是由于EhCache是进程内的缓存框架,在集群模式下时,各应用服务器之间的缓存都是独立的,因此在不同服务器的进程间会存在缓存不一致的情况。即使EhCache提供了集群环境下的缓存同步策略,但是同步依然需要一定的时间,短暂的缓存不一致依然存在。

 

在一些要求高一致性(任何数据变化都能及时的被查询到)的系统和应用中,就不能再使用EhCache来解决了,这个时候使用集中式缓存是个不错的选择。但是,我写的demo没有变。。。还需要研究


12、使用spring boot实现发送邮件

添加依赖

 
 
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-velocity</artifactId>
</dependency> //这个是用与发送邮件的添加图片
application.yml中配置

 
 
spring.mail.host = smtp.qq.com
spring.mail.username = username@qq.com
spring.mail.password = password
spring.mail.properties.mail.smtp.auth = true
spring.mail.properties.mail.smtp.starttls.enable = true
spring.mail.properties.mail.smtp.starttls.required = true
需要开启邮箱的POP3/STMP协议。

//发送邮件

 
 
@Autowired
private JavaMailSender mailSender ;
@Autowired
private VelocityEngine velocityEngine ;
@Test
public void sendSimpleMail () throws Exception {
SimpleMailMessage message = new SimpleMailMessage ();
message . setFrom ( "dyc87112@qq.com" );
message . setTo ( "dyc87112@qq.com" );
message . setSubject ( "主题:简单邮件" );
message . setText ( "测试邮件内容" );
mailSender . send ( message );
}
@Test
public void sendAttachmentsMail () throws Exception {
MimeMessage mimeMessage = mailSender . createMimeMessage ();
MimeMessageHelper helper = new MimeMessageHelper ( mimeMessage , true );
helper . setFrom ( "dyc87112@qq.com" );
helper . setTo ( "dyc87112@qq.com" );
helper . setSubject ( "主题:有附件" );
helper . setText ( "有附件的邮件" );
FileSystemResource file = new FileSystemResource ( new File ( "weixin.jpg" ));
helper . addAttachment ( "附件-1.jpg" , file );
helper . addAttachment ( "附件-2.jpg" , file );
mailSender . send ( mimeMessage );
}
@Test
public void sendInlineMail () throws Exception {
MimeMessage mimeMessage = mailSender . createMimeMessage ();
MimeMessageHelper helper = new MimeMessageHelper ( mimeMessage , true );
helper . setFrom ( "dyc87112@qq.com" );
helper . setTo ( "dyc87112@qq.com" );
helper . setSubject ( "主题:嵌入静态资源" );
helper . setText ( "<html><body><img src=\"cid:weixin\" ></body></html>" , true );
FileSystemResource file = new FileSystemResource ( new File ( "weixin.jpg" ));
helper . addInline ( "weixin" , file );
mailSender . send ( mimeMessage );
}
//这个好像会失败
@Test
public void sendTemplateMail () throws Exception {
MimeMessage mimeMessage = mailSender . createMimeMessage ();
MimeMessageHelper helper = new MimeMessageHelper ( mimeMessage , true );
helper . setFrom ( "dyc87112@qq.com" );
helper . setTo ( "dyc87112@qq.com" );
helper . setSubject ( "主题:模板邮件" );
Map < String , Object > model = new HashedMap ();
model . put ( "username" , "didi" );
String text = VelocityEngineUtils . mergeTemplateIntoString (
velocityEngine , "template.vm" , "UTF-8" , model );
helper . setText ( text , true );
mailSender . send ( mimeMessage );
}

13、Spring boot使用RabbitMQ

RabbitMQ安装可以看上一篇

添加依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
配置RabbitMQ属性

spring.application.name=spirng-boot-rabbitmq-sender
spring.rabbitmq.host=192.168.111.128
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456
注入Queue

@Configuration
public class SenderConf {

    @Bean
   public Queue queue(){
        return new Queue("queue");
    }
}
发送

@Component
public class Sender {
    @Autowired
    private AmqpTemplate template;

    public void send(){
        template.convertAndSend("queue","hello,rabbit");
    }
}

接受方其他不需要变,

 
 
@Component
@RabbitListener ( queues = "hello" )
public class Receiver {
@RabbitHandler
public void process ( String hello ) {
System . out . println ( "Receiver : " + hello );
}
}
这个只是RabbitMQ的初步使用。具体得看需求。


Spring Boot 差不多就是这么多了。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值