菜鸟刚接触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数据库索引(默认为0) spring.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做缓存
添加依赖
需要在resources目录下新建一个ehcache.xml文件
Application上添加@EnableCaching注解
加上@CacheConfig,@Cacheable注解即可
这些注解可以看 http://blog.csdn.net/poorcoder_/article/details/55258253
(2)使用redis做缓存
添加依赖:
配置redis属性: 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实现发送邮件
添加依赖
application.yml中配置 需要开启邮箱的POP3/STMP协议。//发送邮件
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"); } }
接受方其他不需要变,
这个只是RabbitMQ的初步使用。具体得看需求。
Spring Boot 差不多就是这么多了。。