1. 前言
  下载最新版的JavaEE eclipse-jee-oxygen-2-win32-x86_64.zip
  安装STS插件 Window->Eclipse Marketplace -> popular 下那个 Spring Tools(aka Spring IDE and Spring Tool Suite)

  然后通过STS工具创建一个新的Spring boot工程,这里就不细说了。网上资料很多,也比较简单就可以搭建起来。后面对SpringBoot也只是简单的提一下,还有说一下注意点。没什么好说的。我也是参考一些文档和博客,自己玩玩而已。
  大部分参考这系列博客,从头到尾,调重点练习一遍: http://www.ityouknow.com/spring-boot.html
2. HelloWorld
  后面入门Spring Cloud在进行细说,该系列博客主要是记录我在搭建物联网云平台时遇到的问题,和目前自己觉得最适合公司用的解决方案。
  SpringApplicationDemo.java

 @SpringBootApplication
public class SpringApplicationDemo {
@RequestMapping("/home")
String home() {
return "欢迎使用";
}
public static void main(String[] args) {
System.out.println("start..");
SpringApplication.run(SpringApplicationDemo.class, args);
}
}

  pom.xml

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.demo</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo Maven Webapp</name>
<url>http://maven.apache.org</url> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
<finalName>demo</finalName>
</build>
<packaging>war</packaging>
</project>

  3. 配置在application.properties

  (1) 自定义Property

 net.demo.title=\u6D4B\u8BD5\u4F8B\u5B50
net.demo.description=demo\u6D4B\u8BD5

  引用

 @Component
public class DemoProperties {
@Value("${net.demo.title}")
private String title;
@Value("${net.demo.description}")
private String description;
Get/Set
}

  注入使用

 @Autowired
DemoProperties prop;

  (2)log配置

 logging.path=log
logging.level.com.favorites=DEBUG
logging.level.org.springframework.web=INFO

4. 连接Postgres数据库

  pom.xml增加

 <!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>

  application.properties

 net.demo.title=\u6D4B\u8BD5\u4F8B\u5B50
net.demo.description=demo\u6D4B\u8BD5 logging.path=log
logging.level.com.favorites=INFO
logging.level.org.springframework.web=INFO spring.datasource.url=jdbc:postgresql://172.16.23.202:5432/test
spring.datasource.username=postgres
spring.datasource.password=
spring.datasource.driverClassName=org.postgresql.Driver mybatis.typeAliasesPackage=net.xxx.demo.model
mybatis.mapperLocations=classpath:net/xxx/demo/mapper/*.xml

  接下来就是跟以前SSM框架一样了,

  PersonMapper.xml
  PersonModel.java
  PersonDao.java
  PersonService.java
  PersonController.java
  修改 mapper.xml Eclipse 可以安装 MyBatipse 这个插件
5. thymeleaf 模版
  这个只是抛砖引玉提一下而已,我估计不会用上。我后面准备考虑用阿里的Ant.Design
6. Redis 连接
  依赖 pom.xml

 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

  配置 application.properties

 # REDIS (RedisProperties)
spring.redis.database=
spring.redis.host=172.16.20.229
spring.redis.port=
spring.redis.password=
spring.redis.pool.max-active=
spring.redis.pool.max-wait=-
spring.redis.pool.max-idle=
spring.redis.pool.min-idle=
spring.redis.timeout=

  RedisConfig.java

 @Configuration
public class RedisConfig { @Bean
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer(ObjectMapper objectMapper) {
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(
Object.class);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
return jackson2JsonRedisSerializer;
} @Bean
RedisTemplate<String, Object> objRedisTemplate(JedisConnectionFactory connectionFactory,
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(connectionFactory);
redisTemplate.setDefaultSerializer(jackson2JsonRedisSerializer);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringRedisSerializer);
redisTemplate.setHashKeySerializer(stringRedisSerializer);
return redisTemplate;
}
}

  RedisTestService.java

 @Service
public class RedisTestService { @Autowired
private RedisTemplate<String, Object> redisTemplate; private static String REDIS_TEST_KEY = "redis-test"; public Person save(Person person) {
this.redisTemplate.opsForHash().put(REDIS_TEST_KEY, person.getName(), person);
return person;
} public Object find(String uid) {
return this.redisTemplate.opsForHash().get(REDIS_TEST_KEY, uid);
} public Map<Object, Object> findAll(){
return this.redisTemplate.opsForHash().entries(REDIS_TEST_KEY);
} public Long delete(String uid) {
return this.redisTemplate.opsForHash().delete(REDIS_TEST_KEY, uid);
}
}

  RedisTestController.java

 @RestController
@RequestMapping("/api/redis")
public class RedisTestController { @Autowired
private RedisTestService redisTestService; @RequestMapping("/save")
public Object save(@RequestParam("name") String name,
@RequestParam("password") String password,
@RequestParam("uid") Integer uid) {
Person person = new Person();
person.setName(name);
person.setPassword(password);
person.setUid(uid);
return redisTestService.save(person);
} @RequestMapping("/save1")
public Object save1(Person person) {
return redisTestService.save(person);
} @GetMapping("{uid}")
public Object find(@PathVariable String uid) {
System.out.println(uid);
return redisTestService.find(uid);
} @RequestMapping("/findall")
public Object findAll() {
return redisTestService.findAll();
} @GetMapping("/delete/{uid}")
public Long delete(@PathVariable String uid) {
return redisTestService.delete(uid);
}
}

7.Redis-Cache

 @Configuration
@EnableCaching
public class RedisCacheManager { @Bean
public RedisCacheManager cacheManager() {
RedisCacheManager redisCacheManager = new RedisCacheManager();
return redisCacheManager;
}
}

  然后可以通过如下注解进行缓存

 @Cacheable(value="find", key="#uid")

  如果发现Key相同,那么直接返回redis里的value,不对方法进行调用,否则调用对于方法,并设置到redis中。

  参考这个 http://www.ityouknow.com/springboot/2016/03/06/springboot(%E4%B8%89)-Spring-Boot%E4%B8%ADRedis%E7%9A%84%E4%BD%BF%E7%94%A8.html
  还有一个分布式session自带解决方案 Session-spring-session-data-redis
  https://segmentfault.com/a/1190000004358410
8. redis-session
  pom.xml

 <dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>

  SessionConfig.java

 @Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds=5)
public class SessionConfig { }

  使用

 @RequestMapping("/guid")
public String session(HttpSession session) {
UUID guid = (UUID)session.getAttribute("GUID");
if(guid == null) {
guid = UUID.randomUUID();
}
session.setAttribute("GUID", guid);
return session.getId();
}

9. 定时器的使用
  在application启动类加上以下这个注解 @EnableScheduling   然后如下使用

 @Scheduled(cron="*/5 * * * * ?")
private void process() {
System.out.println("this is scheduler task running: " + (count ++) + " " + System.currentTimeMillis());
}

10.打包部署

  根据pom.xml里   <packaging>jar</packaging> 打成jar包或者war包
  打成jar包
  如果你使用的是maven来管理项目,执行以下命令既可以

 cd 项目跟目录(和pom.xml同级)
mvn clean package
## 或者执行下面的命令
## 排除测试代码后进行打包
mvn clean package -Dmaven.test.skip=true

  打包完成后jar包会生成到target目录下,命名一般是 项目名+版本号.jar

  启动jar包命令

 java -jar target/spring-boot-scheduler-1.0..jar

  这种方式,只要控制台关闭,服务就不能访问了。下面我们使用在后台运行的方式来启动:

 nohup java -jar target/spring-boot-scheduler-1.0..jar &

  也可以在启动的时候选择读取不同的配置文件

 java -jar app.jar --spring.profiles.active=dev

  也可以在启动的时候设置jvm参数

 java -Xms10m -Xmx80m -jar app.jar &

11.几个常用插件

  Vrapper 一个vim键盘映射插件
  MyBatipse mybatis mapper插件
  STS springboot插件
  Decompiler  反编译插件

物联网架构成长之路(13)-SpringBoot入门的更多相关文章

  1. 物联网架构成长之路(32)-SpringBoot集成MQTT客户端

    一.前言 这里虽然是说MQTT客户端.其实对于服务器来说,这里的一个具有超级权限的MQTT客户端,就可以做很多事情.比如手机APP或者网页或者第三方服务需要发送数据到设备,但是这些又不是设备,又不能让 ...

  2. 物联网架构成长之路(14)-SpringBoot整合thymeleaf

    使用thymeleaf作为模版进行测试 在pom.xml 增加依赖 <dependency> <groupId>org.springframework.boot</gro ...

  3. 物联网架构成长之路(25)-Docker构建项目用到的镜像1

    0. 前言 现在项目处于初级阶段,按照规划,先构建几个以后可能会用到的Image,并上传到阿里云的Docker仓库.以后博客中用到的Image,大部分都会用到这几个基础的Image,构建一个简单的物联 ...

  4. 物联网架构成长之路(31)-EMQ基于HTTP权限验证

    看过之前的文章就知道,我之前是通过搞插件,或者通过里面的MongoDB来进行EMQ的鉴权登录和权限验证.但是前段时间发现,还是通过HTTP WebHook 方式来调用鉴权接口比较适合实际使用.还是实现 ...

  5. 物联网架构成长之路(22)-Docker练习之Etcd服务搭建

    0. 前言 时隔多日,前段时间忙完一个可有可无的项目后,又进入摸鱼时间,没有办法,非互联网公司,就是闲得蛋疼.又开始了自学之路.以前入门过Docker,然后又很久没有看了,最近重新看了一下,推荐一下这 ...

  6. 物联网架构成长之路(16)-SpringCloud从入门到吹水

    1.前言 Spring Cloud 现在比较流行,版本更新也是蛮快的,网上资料也是很多.很多参考网上资料就可以学到了.这里给个 http://blog.csdn.net/forezp/article/ ...

  7. 物联网架构成长之路(43)-k8s从入门到放弃

    0. 前言 这段时间要入门一下CI/CD了,以前简单的了解过Jenkins,现在要把以下的这个图的架构搭建起来.国外可能一两个命令就安装完成的事情,我折腾了2天多,真的差点放弃了. 1. 安装Virt ...

  8. 物联网架构成长之路(36)-Vue前端入门

    1. 前言 物联网平台,需要有一个类似大屏看板的功能. 找了一圈,发现阿里已经有对应的DataV产品,但是那个价格有点贵啊.所以找了这个[http://datav.jiaminghi.com/demo ...

  9. 物联网架构成长之路(15)-Jenkins部署SpringBoot

    1.前言 现在慢慢也在负责一些工作了.这段时间有空,就多了解了解软件多人开发的一些知识.以前项目都是我一个人做的,从数据库设计到后端再到前端,全部放在一个war包丢到tomcat里面然后运行,利用to ...

随机推荐

  1. PyCharm 和 IntelliJ IDEA的破解激活

    本教程对jetbrains全系列可用,例如:IDEA.WebStorm.phpstorm.clion等 PyCharm激活: 方法一: server选项里边输入  http://elporfirio. ...

  2. hdu 4513 最长不下降回文序列【manacher】

    <题目链接> 吉哥又想出了一个新的完美队形游戏!  假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形 ...

  3. SQL Server中查找包含某个文本的存储过程

    SELECT name,text from sysobjects o,syscomments s where o.id=s.id and text LIKE '%text%' and o.xtype= ...

  4. OSINT系列:网站信任评估WOT

     OSINT系列:网站信任评估WOT Web of Trust(WOT)是芬兰的一家网站信任评估服务公司.它通过收集用户对网站的评价,来评估网站的可信任度.在该公司网站www.mywot.com,用户 ...

  5. C# 使用PrintDocument 绘制表格 完成 打印预览 DataTable

    经过不断的Google与baidu,最终整理出来的打印类 主要是根据两个参考的类组合而成,稍微修改了一下,参考代码及来源见最后(其中一份是VB语言的) 其中遇到的一些问题也已经得到了解决(分页,打印预 ...

  6. BZOJ.3638.CF172 k-Maximum Subsequence Sum(模拟费用流 线段树)

    题目链接 各种zz错误..简直了 /* 19604kb 36292ms 题意:选$k$段不相交的区间,使其权值和最大. 朴素线段树:线段树上每个点维护O(k)个信息,区间合并时O(k^2),总O(mk ...

  7. Spark MLlib 之 aggregate和treeAggregate从原理到应用

    在阅读spark mllib源码的时候,发现一个出镜率很高的函数--aggregate和treeAggregate,比如matrix.columnSimilarities()中.为了好好理解这两个方法 ...

  8. Android Developers:传感器概述

    大 多数Android设备有内置的传感器,来测量运动,方向和各种环境条件.这些传感器能提供高精度和准确度的原始数据,如果你想监控设备三维运动或者位 置,或者你想监控设备周围的环境变化,是非常有用的.例 ...

  9. js获取浏览器版本信息整理

    一.Navigator 对象 JavaScript Navigator 对象包含了有关访问者浏览器的所有信息.接下来我们学习 Navigator 对象的两个属性. appName 保存浏览器类型 ap ...

  10. asp.net mvc Session RedisSessionStateProvider锁的实现

    最近项目用到了RedisSessionStateProvider来保存session,发现比内存session慢,后来慢慢了解,发现asp.net session是有锁的.我在文章 你的项目真的需要S ...