org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.2
runtime
mysql
mysql-connector-java
runtime
com.alibaba
druid
1.1.6
(2)加入配置文件
#mybatis.type-aliases-package=net.xdclass.base_project.domain
#可以自动识别
#spring.datasource.driver-class-name =com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/movie?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
#如果不使用默认的数据源 (com.zaxxer.hikari.HikariDataSource)
spring.datasource.type =com.alibaba.druid.pool.DruidDataSource
#驼峰命名转换
mybatis.configuration.mapUnderscoreToCamelCase=true
#控制台打印sql语句
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
(3)启动类增加注解扫描
mapper@MapperScan("com.neusoft.mapper")
(4)mapper接口开发
public interface UserMapper {
//推荐使用#{}取值,不要用${},因为存在注入的风险
@Insert("INSERT INTO user(name,phone,create_time,age) VALUES(#{name}, #{phone}, #{createTime},#{age})")
@Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")//获取自增id
int insert(User user);
@Select("SELECT * FROM user")
List getAll();
//开启驼峰命名转换可省略@Results注解中的字段映射
@Select("SELECT * FROM user WHERE id = #{id}")
//@Results({@Result(column = "create_time",property = "createTime")})
User findById(Long id);
}
(5)业务逻辑层调用略
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(128) DEFAULT NULL COMMENT '名称',
`phone` varchar(16) DEFAULT NULL COMMENT '用户手机号',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`age` int(4) DEFAULT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
(6)mapper开发语法参考
//service逻辑层引入事务
@Transantional(propagation=Propagation.REQUIRED)
(8)常见的传播行为
org.springframework.boot
spring-boot-starter-data-jpa
mysql
mysql-connector-java
runtime
com.alibaba
druid
1.1.6
(2)配置文件
#=========MySQL配置=========
spring.datasource.url=jdbc:mysql://localhost:3306/movie?useUnicode=true&characterEncoding=utf-8
spring.datasource.username =root
spring.datasource.password =root
##如果不使用默认的数据源 (com.zaxxer.hikari.HikariDataSource)
spring.datasource.type =com.alibaba.druid.pool.DruidDataSource
#=========JPA配置=========
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
(3)创建实体类
@Entity
public class User {
@Id
@GeneratedValue
private Integer id;
@Column
private String name;
@Column
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
(4)Dao层
public interface UserDao extends JpaRepository {
}
(5)Web层@RestController
public class IndexController {
@Autowired
private UserDao userDao;
@RequestMapping("/index")
public User index(Integer id) {
return userDao.findOne(id);
}
}
org.springframework.boot
spring-boot-starter-data-redis
(3)相关配置文件配置
#=========redis基础配置=========
spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
#如果有密码
spring.redis.password=
# 连接超时时间 单位 ms(毫秒)
spring.redis.timeout=3000
#=========redis线程池设置=========
# 连接池中的最大空闲连接,默认值也是8。
spring.redis.jedis.pool.max-idle=200
#连接池中的最小空闲连接,默认值也是0。
spring.redis.jedis.pool.min-idle=200
# 如果赋值为-1,则表示不限制;pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
spring.redis.jedis.pool.max-active=2000
# 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时
spring.redis.jedis.pool.max-wait=1000
(4)redistemplate操作redis
@RestController
public class IndexController {
@Autowired
private StringRedisTemplate redisTpl;
@RequestMapping("testRedis")
public Object index(){
redisTpl.opsForValue().set("name","xiaoLuo");
String name = redisTpl.opsForValue().get("name");
return name;
}
}
org.springframework.boot
spring-boot-starter-data-elasticsearch
③配置文件:
spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=localhost:9300
spring.data.elasticsearch.repositories.enabled=true
④新建实体对象article,加上注解 @Document(indexName = "blog", type = "article")
@Document(indexName = "blog", type = "article")
public class Article implements Serializable{
private static final long serialVersionUID = 1L;
private long id;
private String title;
private String summary;
private String content;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
⑤接口继承ElasticSearchRepository,里面有很多默认实现
@Component
public interface ArticleRepository extends ElasticsearchRepository {
}
⑥调用示例
@RestController
public class ArticleController {
@Autowired
private ArticleRepository articleRepository;
@GetMapping("save")
public Object save(long id,String title){
Article article = new Article();
article.setId(id);
article.setContent("springboot整合elasticsearch");
article.setTitle(title);
article.setSummary("搜索框架整合");
articleRepository.save(article);
return "ok";
}
@GetMapping("search")
public Object search(String title){
//QueryBuilder queryBuilder = QueryBuilders.matchAllQuery(); //搜索全部文档
QueryBuilder queryBuilder = QueryBuilders.matchQuery("title", title);
Iterable list = articleRepository.search(queryBuilder);
return JsonData.buildSuccess(list);
}
}
(2)QueryBuilder复杂条件查询使用
org.springframework.boot
spring-boot-starter-activemq
org.apache.activemq
activemq-pool
②配置文件
#=========ActiveMQ=========
spring.activemq.broker-url=tcp://127.0.0.1:61616
#集群配置
#spring.activemq.broker-url=failover:(tcp://localhost:61616,tcp://localhost:61617)
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.pool.enabled=true
spring.activemq.pool.max-connections=100
③springboot启动类添加注解
@EnableJms,开启支持jms
public interface ProducerService {
/**
* 功能描述:指定消息队列,还有消息
* @param destination
* @param message
*/
public void sendMessage(Destination destination, final String message);
}
@Service
public class ProducerServiceImpl implements ProducerService {
@Autowired
private JmsMessagingTemplate jmsTemplate; //用来发送消息到broker的对象
//发送消息,destination是发送到的队列,message是待发送的消息
@Override
public void sendMessage(Destination destination, String message) {
jmsTemplate.convertAndSend(destination, message);
}
}
⑤消费者:实时监听对应的队列
@Component
public class OrderConsumer {
@JmsListener(destination="order.queue")
public void receiveQueue(String text){
System.out.println("OrderConsumer收到的报文为:"+text);
}
}
⑥调用
@RestController
@RequestMapping("/api/v1")
public class OrderController {
@Autowired
private ProducerService producerService;
@GetMapping("order")
public Object order(String msg){
Destination destination = new ActiveMQQueue("order.queue");
producerService.sendMessage(destination, msg);
return "ok";
}
}
2.发布订阅消息(pub/sub)
#=========ActiveMQ=========
spring.activemq.broker-url=tcp://127.0.0.1:61616
#集群配置
#spring.activemq.broker-url=failover:(tcp://localhost:61616,tcp://localhost:61617)
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.pool.enabled=true
spring.activemq.pool.max-connections=100
#添加支持发布订阅模型,默认只支持点对点
spring.jms.pub-sub-domain=true
③启动类
@EnableJms
@SpringBootApplication
public class TestActivemqApplication {
public static void main(String[] args) {
SpringApplication.run(TestActivemqApplication.class, args);
}
//主题对象交给spring管理
@Bean
public Topic topic(){
return new ActiveMQTopic("video.topic");
}
}
④生产者
public interface ProducerService {
/**
* 功能描述:消息发布者
* @param msg
*/
void publish(String msg);
}
@Service
public class ProducerServiceImpl implements ProducerService {
@Autowired
private JmsMessagingTemplate jmsTemplate; //用来发送消息到broker的对象
@Autowired
private Topic topic;
@Override
public void publish(String msg) {
this.jmsTemplate.convertAndSend(this.topic, msg);
}
}
⑤消费者
@Component
public class TopicSub {
@JmsListener(destination="video.topic")
public void receive1(String text){
System.out.println("video.topic 消费者:receive1="+text);
}
@JmsListener(destination="video.topic")
public void receive2(String text){
System.out.println("video.topic 消费者:receive2="+text);
}
@JmsListener(destination="video.topic")
public void receive3(String text){
System.out.println("video.topic 消费者:receive3="+text);
}
}
⑥调用
@RestController
@RequestMapping("/api/v1")
public class TopicController {
@Autowired
private ProducerService producerService;
@GetMapping("topic")
public Object topic(String msg){
producerService.publish( msg);
return "ok";
}
}
3.点对点模式和发布订阅者模式共存需要添加或修改配置如下
@Bean
public JmsListenerContainerFactory jmsListenerContainerTopic(ConnectionFactory activeMQConnectionFactory) {
DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
bean.setPubSubDomain(true);
bean.setConnectionFactory(activeMQConnectionFactory);
return bean;
}
②订阅者中
//@JmsListener如果不指定独立的containerFactory的话是只能消费queue消息
@JmsListener(destination="video.topic", containerFactory="jmsListenerContainerTopic")
public void receive1(String text){
System.out.println("video.topic 消费者:receive1="+text);
}
③在配置文件里面,注释掉 #spring.jms.pub-sub-domain=true
org.springframework.kafka
spring-kafka
(3)添加配置信息
spring.kafka.bootstrap-servers=127.0.0.1:9092
spring.kafka.consumer.group-id=myGroup
(4)创建生产者服务
package com.neusoft.kafka;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;
@Component
public class ProviderService {
@Autowired
private KafkaTemplate kafkaTemplate;
public void sender(String topic,String value){
kafkaTemplate.send(topic,value);
}
}
(5)创建消费者服务,开启监听
package com.neusoft.kafka;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class ConsumerService {
@Resource
private KafkaTemplate kafkaTemplate;
@KafkaListener(topics = "mytopics")
public void consumer(String message){
System.out.println("======="+message);
}
}
(6)调用示例
package com.neusoft.controller;
import com.neusoft.kafka.ProviderService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class IndexController {
@Resource
private ProviderService providerService;
@RequestMapping("index")
public Object index(String name){
for (int i = 0; i < 5; i++) {
providerService.sender("mytopics",name+" test... "+i);
}
return "ok";
}
}
===========log4j示例===========
### 设置###
log4j.rootLogger = debug,stdout,D,E
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=D://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出ERROR 级别以上的日志到=D://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
===========logback============
(5)Log4j日志转换为logback在线工具(支持log4j.properties转换为logback.xml,不支持 log4j.xml转换为logback.xml)