标签: Spring Boot

spring boot之——health监控实现

1.实现HealthIndicator这个接口

package org.springframework.boot.actuate.health;

public interface HealthIndicator {

Health health();

}
2.AbstractHealthIndicator这个抽象类实现HealthIndicator接口

package org.springframework.boot.actuate.health;

import org.springframework.boot.actuate.health.Health.Builder;

public abstract class AbstractHealthIndicator implements HealthIndicator {

@Override
public final Health health() {
Health.Builder builder = new Health.Builder();
try {
doHealthCheck(builder);
}
catch (Exception ex) {
builder.down(ex);
}
return builder.build();
}

protected abstract void doHealthCheck(Health.Builder builder) throws Exception;

}
3.我们只需要继承这个抽象类,就可以实现业务监控!

代码如下:

 

import com.alibaba.fastjson.JSON;
import com.yum.ec3.message.bean.BrandExchangeConfigBean;
import com.yum.ec3.misc.client.MiscClient;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

@Component
public class MessageListenerHealthIndicator extends AbstractHealthIndicator {
private static final Logger logger = LoggerFactory.getLogger(MessageListenerHealthIndicator.class);

//过滤的key配置
@Value(“${properties.application.line}.${properties.application.brand}.${message.webapp}.${message.messageRuntimeConfigKey}”)
private String messageRuntimeConfigKey;

@Autowired
private MiscClient client;

@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
builder.withDetail(“messageRuntimeConfigMap”, getResult());
builder.up();
}
/**
* 获取生效的配置
* @return
*/
public Map<String, Object> getResult() {
Map<String, Object> result = new HashMap<>();
try {
Map<String, Object> messageRuntimeConfigMap = client.getParameterValue(messageRuntimeConfigKey);
Set<String> keySet = messageRuntimeConfigMap.keySet();
if (CollectionUtils.isNotEmpty(keySet)) {
for (Iterator<String> iterator = keySet.iterator(); iterator.hasNext(); ) {
BrandExchangeConfigBean brandExchangeConfigBean = JSON.parseObject(JSON.toJSONString(messageRuntimeConfigMap.get(iterator.next())), BrandExchangeConfigBean.class);
if (!brandExchangeConfigBean.getSkip()) {
iterator.remove();
}
}
for(String keyTemp:keySet ){
Map<String, Object> temp = new HashMap<>();
temp.put(“skip”,true);
result.put(keyTemp,temp) ;
}
}
} catch (Exception e) {
logger.error(“misc.client|getParameterValue方法异常”, e);
}

return result;
}

}

快速搭建Spring Boot项目

Spring Boot简介:

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者(官网介绍)。

 

Spring Boot特点:

       1. 创建独立的Spring应用程序
       2. 嵌入的Tomcat,无需部署WAR文件
       3. 简化Maven配置
       4. 自动配置Spring
       5. 提供生产就绪型功能,如指标,健康检查和外部配置
       6. *对没有代码生成并且对XML也没有配置要求
快速入门:
       1、访问http://start.spring.io/
       2、填写相关的项目信息、jdk版本等(可参考下图)
    %title插图%num       3、点击Generate Project,就会生成一个maven项目的压缩包,下载项目压缩包

4、解压后,使用eclipse,Import -> Existing Maven Projects -> Next ->选择解压后的文件夹-> Finsh

 

项目结构介绍:

如下图所示,Spring Boot的基础结构共三个文件:

%title插图%num

src/main/java  –程序开发以及主程序入口

src/main/resources –配置文件

src/test/java  –测试程序

 

 

Spring Boot推荐的项目结构:

根目录:com.example.myproject

       1)domain:实体类(com.example.domain)

       2)Dao:数据访问层(com.example.repository)

       3)Service:数据服务接口层(com.example.service)

            ServiceImpl:数据服务实现层(com.example.service.impl)

       4)Controller:前端控制器(com.example.controller)

       5)utils:工具类(com.example.utils)

       6)constant:常量接口类(com.example.constant)

       7)config:配置信息类(com.example.config)

       8)dto:数据传输对象(Data Transfer Object,用于封装多个实体类(domain)之间的关系,不破坏原有的实体类结构)(com.example.dto)

       9)vo:视图包装对象(View Object,用于封装客户端请求的数据,防止部分数据泄露,保证数据安全,不破坏原有的实体类结构)(com.example.vo)

 

 

引入Web模块:

在pom.xml添加支持Web的模块

1 <dependency>
2     <groupId>org.springframework.boot</groupId>
3     <artifactId>spring-boot-starter-web</artifactId>
4 </dependency>

 

运行项目:

1、创建controller

 1 package com.example.annewebsite_server.controller;
 2 
 3 import org.springframework.web.bind.annotation.GetMapping;
 4 import org.springframework.web.bind.annotation.RestController;
 5 
 6 @RestController
 7 public class HelloController {
 8     @GetMapping("/hello")
 9     public String say(){
10         return "Hello Spring Boot!";
11     }
12 }

%title插图%num

 

2、启动项目入口

%title插图%num

 

 

3、项目启动成功

%title插图%num

 

4、在浏览器中进行访问(http://localhost:8080/hello)

%title插图%num

以上是一个Spring Boot项目的搭建过程,希望能够给正在学习Spring Boot的同仁带来一些些帮助,不足之处,欢迎指正。

搭建Spring Boot项目 如何配置数据源

在上一章中,我们已经搭建好项目,现在来讲一下如何配置数据源。

由于在有的项目中,用的数据源可能会涉及多个,且是不同类型的,我们接下来就讲解多数据源的配置。

 

情景描述:

现有项目需要访问不同的数据库,有Mysql、Oracle、Sql server数据库

就以该情景为例,讲讲该如何配置。

 

步骤:

1、在resources文件夹下新建persistence-multiple-db.properties资源文件,如下图:

(备注:具体的值自己配置)

%title插图%num

 1 # Mysql数据库
 2 app.datasource.mysql.url=jdbc:mysql://192.168.1.100/XXX数据库名称
 3 app.datasource.mysql.username=username
 4 app.datasource.mysql.password=password
 5 app.datasource.mysql.driver-class-name=com.mysql.jdbc.Driver
 6 app.datasource.mysql.maximum-pool-size=10
 7 
 8 # Oracle数据库
 9 app.datasource.oracle.url=jdbc:oracle:thin:@192.168.1.100:1521/XXX数据库名称
10 app.datasource.oracle.username=username
11 app.datasource.oracle.password=password
12 app.datasource.oracle.driver-class-name=oracle.jdbc.driver.OracleDriver
13 app.datasource.oracle.maximum-pool-size=30
14 
15 # Sql server数据库
16 app.datasource.sqlserver.url=jdbc:sqlserver://192.168.1.100;databaseName=XXX数据库名称
17 app.datasource.sqlserver.username=username
18 app.datasource.sqlserver.password=password
19 app.datasource.sqlserver.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
20 app.datasource.sqlserver.maximum-pool-size=30

 

2、在config文件夹中新建MysqlDatabaseConfig.java、OracleDatabaseConfig.java、SqlserverDatabaseConfig.java

在domain文件夹中新建mysql、oracle、sqlserver文件夹

在repository文件夹中新建mysql、oracle、sqlserver文件夹

(备注:命名可以自定义,我这里是为了便于区分)

%title插图%num

接下来就依次配置这三个文件,以MysqlDatabaseConfig.java为例说明一下,另外两个同理,但是要注意@Primary(优先考虑,优先考虑被注解的对象注入)注解,另外两个不要添加该注解

 1 package com.hyl.springdemo.config;
 2 
 3 import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
 4 import com.zaxxer.hikari.HikariDataSource;
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.boot.jdbc.DataSourceBuilder;
 7 import org.springframework.context.annotation.Bean;
 8 import org.springframework.context.annotation.Configuration;
 9 import org.springframework.context.annotation.Primary;
10 import org.springframework.context.annotation.PropertySource;
11 import org.springframework.core.env.Environment;
12 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
13 import org.springframework.orm.jpa.JpaTransactionManager;
14 import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
15 import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
16 import org.springframework.transaction.PlatformTransactionManager;
17 
18 import javax.sql.DataSource;
19 import java.util.HashMap;
20 
21 @Configuration
22 @EnableEncryptableProperties
23 @PropertySource({ "classpath:persistence-multiple-db.properties" })
24 @EnableJpaRepositories(
25         basePackages = "com.hyl.springdemo.repository.mysql",
26         entityManagerFactoryRef = "mysqlEntityManager",
27         transactionManagerRef = "mysqlTransactionManager"
28 )
29 public class MysqlDatabaseConfig {
30 
31     @Autowired
32     private Environment env;
33 
34     @Bean
35     @Primary
36     public DataSource mysqlDataSource() {
37 
38         HikariDataSource dataSource = DataSourceBuilder.create().type(HikariDataSource.class).build();
39         dataSource.setDriverClassName(env.getProperty("app.datasource.mysql.driver-class-name"));
40         dataSource.setJdbcUrl(env.getProperty("app.datasource.mysql.url"));
41         dataSource.setUsername(env.getProperty("app.datasource.mysql.username"));
42         dataSource.setPassword(env.getProperty("app.datasource.mysql.password"));
43         dataSource.setMaximumPoolSize(Integer.parseInt(env.getProperty("app.datasource.mysql.maximum-pool-size")));
44 
45         return dataSource;
46     }
47 
48     @Bean
49     @Primary
50     public LocalContainerEntityManagerFactoryBean mysqlEntityManager() {
51         LocalContainerEntityManagerFactoryBean em
52                 = new LocalContainerEntityManagerFactoryBean();
53         em.setDataSource(mysqlDataSource());
54         em.setPackagesToScan(
55                 new String[] { "com.hyl.springdemo.domain.mysql" });
56 
57         HibernateJpaVendorAdapter vendorAdapter
58                 = new HibernateJpaVendorAdapter();
59         em.setJpaVendorAdapter(vendorAdapter);
60         em.setPersistenceUnitName("MysqlPersistenceUnit");
61         HashMap<String, Object> properties = new HashMap<>();
62         properties.put("hibernate.hbm2ddl.auto",
63                 env.getProperty("hibernate.hbm2ddl.auto"));
64         properties.put("hibernate.dialect",
65                 "org.hibernate.dialect.MySQL5Dialect");
66         em.setJpaPropertyMap(properties);
67 
68         return em;
69     }
70 
71     @Bean
72     @Primary
73     public PlatformTransactionManager mysqlTransactionManager() {
74 
75         JpaTransactionManager transactionManager
76                 = new JpaTransactionManager();
77         transactionManager.setEntityManagerFactory(
78                 mysqlEntityManager().getObject());
79         return transactionManager;
80     }
81 }

 

3、新建Repository,访问数据库(关于该部分,在后续的文章中再进行介绍)

%title插图%num

 

4、新建Service层,访问Repository

%title插图%num

 

5、在Controller层中进行调用

%title插图%num

 

6、运行项目,在网页中查看

%title插图%num

此篇博文主要是为了介绍配置多数据源,涉及到的其它内容在后续的博文中会逐一介绍

 

Intellij IDEA 搭建Spring Boot项目

*近做的一个项目是用Spring Boot来做的,所以把工作中遇到的一些知识点、问题点整理一下,做成一系列学习文章,供后续学习Spring Boot的同仁们参考,我也是*次接触Spring Boot,不足之处,请多指教。

 

 

Intellij IDEA 搭建Spring Boot项目,步骤如下:

 

1、选择File –> New –> Project –>Spring Initializr,点击Next

%title插图%num

2、修改Group、Artifact,点击Next

%title插图%num

3、选择Web,以及Spring Boot的版本,点击Next

%title插图%num

4、选择项目路径,点击Finish

%title插图%num

5、等待编译完成(下载依赖会比较慢~~)

6、删除这三个文件

%title插图%num

7、项目的目录结构

%title插图%num

8、创建项目所需的目录

%title插图%num

9、新建一个HelloController类

%title插图%num

 1 package com.hyl.springdemo.controller;
 2 
 3 import org.springframework.web.bind.annotation.RequestMapping;
 4 import org.springframework.web.bind.annotation.RestController;
 5 
 6 @RestController
 7 public class HelloController {
 8 
 9     @RequestMapping("/hello")
10     private String index(){
11         return "Hello Spring Boot!";
12     }
13 }

10、给项目配置port、path

%title插图%num

11、启动项目

右击SpringDemoApplication,选择run SpringDemoApplication

%title插图%num

 

启动之后,会在控制台看到以下提示信息:

%title插图%num

 

12、在浏览器中输入http://localhost:8221/annetest/hello,查看页面

%title插图%num

看到以上画面,就说明我们的项目创建成功了

后续便可以在此项目基础上去实现更多功能

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速