來開始搭建springCloud的客戶端client服務。html
首先,也是從在線生成了springboot項目。java
在線網址:start.spring.io/mysql
也因爲此次的話,不只僅是侷限於這三個配置文件,我還要新增一些配置文件,因此我先把已經搭建成功了的服務的目錄給你們看一下:web
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--引入mybatis依賴-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency>
<!--引入mybatisPlus依賴-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatisplus-spring-boot-starter</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.1.8</version>
</dependency>
<!-- 模板引擎 代碼生成 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<!-- mysql驅動器依賴-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!--springboot的web依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--Herbnate實體依賴-->
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>
<!-- redis依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!-- 引入Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<!--springCloud啓動依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<!--srpingCloud的eureka服務依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!--srpingCloud的eureka服務註冊依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<!--新增依賴,swaggerUI-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
<!-- alibaba fastjson 格式化對 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.41</version>
</dependency>
<!-- jwt認證協議依賴 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-javanica</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
<!-- 引入spring cloud的依賴,不能少,主要用來管理Spring Cloud生態各組件的版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<!--須要打包的目錄-->
<directory>src/main/resources</directory>
<!--目錄中的文件類型-->
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
複製代碼
這個pom文件裏面,還有redis的依賴,這個是我後續會加進去的,可是現階段尚未加進去。redis
#服務名
spring.application.name=permission
#端口
server.port=2222
################################################################################################################
#數據庫信息
spring.datasource.url: jdbc:mysql://localhost:3306/myblog?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username: root
spring.datasource.password: 123456(請填入你的數據庫密碼)
spring.datasource.driver-class-name: com.mysql.jdbc.Driver
#################################################################################################################
spring.jmx.default-domain=${spring.application.name}
spring.jpa.open-in-view=false
# springframework.web日誌以DEBUG級別輸出
logging.level.org.springframework.web=info
###############################################################################################################
# 若是是放在src/main/java目錄下 classpath:/com/blog/*/mapper/*Mapper.xml
# 若是是放在resource目錄 classpath:/mapper/*Mapper.xml
mybatis-plus.mapper-locations=classpath:/mapper/*Mapper.xml
#實體掃描,多個package用逗號或者分號分隔
mybatis-plus.type-aliases-package=com.blog.*.entity
#駝峯下劃線轉換
mybatis-plus.global-config.db-column-underline=true
#刷新mapper 調試神器
mybatis-plus.global-config.refresh-mapper=false
#數據庫大寫下劃線轉換
mybatis-plus.global-config.capital-mode=true
#################################################################################################################
#配置Swagger相關信息(從eureka跳到swagger頁面)
eureka.instance.prefer-ip-address=true
eureka.instance.hostname=:${spring.cloud.client.ipAddress}
eureka.instance.status-page-url:http://${spring.cloud.client.ipAddress}:${server.port}/swagger-ui.html
####################################################################################################################
#eureka註冊中心路徑
eureka.client.service-url.defaultZone=http://localhost:1111/eureka/
#表示本服務發送給eureka服務端的心跳時間
eureka.instance.leaseRenewalIntervalInSeconds: 10
#當本服務掉線後,eureka服務端取掉本服務的緩存的時間
eureka.instance.leaseExpirationDurationInSeconds: 2
#註冊到eureka上的服務的名字
eureka.instance.instance-id=http://${spring.cloud.client.ipAddress}:${server.port}/${spring.application.name}
#######################################################################################################################
#邏輯刪除配置(下面3個配置),不是真實刪除數據,只是邏輯刪除數據
mybatis-plus.global-config.logic-delete-value=1
mybatis-plus.global-config.logic-not-delete-value=0
mybatis-plus.global-config.sql-injector=com.baomidou.mybatisplus.mapper.LogicSqlInjector
##############################################################################################################
mybatis-plus.global-config.meta-object-handler=com.blog.permission.mabatisPlus.MyMetaObjectHandler
mybatis-plus.configuration.map-underscore-to-camel-case=true
mybatis-plus.configuration.cache-enabled=false
mybatis-plus.configuration.jdbc-type-for-null=null
mybatis-plus.typeAliasesPackage=com.blog.permission.entity
mybatis-plus.global-config.id-type=3
mybatis-plus.global-config.field-strategy=2
mybatis-plus.global-config.key-generator=com.baomidou.mybatisplus.incrementer.OracleKeyGenerator
複製代碼
圖片:spring
@EnableWebSecurity
@SpringCloudApplication
@EnableTransactionManagement
@EnableFeignClients
@ComponentScan(basePackages = "com.blog.permission")
@EnableAsync
@EnableScheduling
@EnableSwagger2
@EnableWebMvc
public class PermissionApplication {
public static void main(String[] args) {
SpringApplication.run(PermissionApplication.class, args);;
}
}
複製代碼
接下來,要開始新增配置文件了。sql
@Configuration
@EnableSwagger2
public class Swagger2 {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.blog.permission.controller"))
.paths(Predicates.not(PathSelectors.regex("/error.*")))//錯誤路徑不監控
.paths(PathSelectors.regex("/.*"))// 對根下全部路徑進行監控
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
//頁面標題
.title("登陸以及權限管理20190926")
//描述
.description("項目API文檔")
//建立人
.contact("就是做者我")
//版本號
.version("1.0")
.build();
}
}
複製代碼
@Configuration
@EnableWebMvc
class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
//設置swagger裏面返回的responsebody的值爲json字符串
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters){
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
List<MediaType> list=new ArrayList<MediaType>();
list.add(MediaType.APPLICATION_JSON_UTF8);
list.add(new MediaType("text","html", Charset.forName("UTF-8")));
list.add(new MediaType("application","*+json",Charset.forName("UTF-8")));
converter.setSupportedMediaTypes(list);
converters.add(converter);
}
}
複製代碼
@EnableTransactionManagement
@Configuration
@MapperScan("com.blog.*.mapper")
public class MybatisPlusConfig {
/**
* mybatis-plus SQL執行效率插件【生產環境能夠關閉】
*/
@Bean
public PerformanceInterceptor performanceInterceptor() {
return new PerformanceInterceptor();
}
/*
* 分頁插件,自動識別數據庫類型 多租戶,請參考官網【插件擴展】
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
@Bean
public MetaObjectHandler metaObjectHandler() {
return new MyMetaObjectHandler();
}
/**
* 注入主鍵生成器
*/
@Bean
public IKeyGenerator keyGenerator() {
return new H2KeyGenerator();
}
/**
* 注入sql注入器
*/
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
}
複製代碼
public class MybatisPlusSql implements FactoryBean<SqlSessionFactory>, InitializingBean, ApplicationListener<ApplicationEvent> {
private static final Log LOGGER = LogFactory.getLog(SqlSessionFactoryBean.class);
private Resource configLocation;
private Configuration configuration;
private Resource[] mapperLocations;
private DataSource dataSource;
private TransactionFactory transactionFactory;
private Properties configurationProperties;
private SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
private SqlSessionFactory sqlSessionFactory;
private String environment = SqlSessionFactoryBean.class.getSimpleName();
private boolean failFast;
private Interceptor[] plugins;
private TypeHandler<?>[] typeHandlers;
private String typeHandlersPackage;
private Class<?>[] typeAliases;
private String typeAliasesPackage;
private Class<?> typeAliasesSuperType;
private DatabaseIdProvider databaseIdProvider;
private Class<? extends VFS> vfs;
private Cache cache;
private ObjectFactory objectFactory;
private ObjectWrapperFactory objectWrapperFactory;
@Override
public SqlSessionFactory getObject() throws Exception {
return null;
}
@Override
public Class<?> getObjectType() {
return null;
}
@Override
public boolean isSingleton() {
return false;
}
@Override
public void afterPropertiesSet() throws Exception {
}
@Override
public void onApplicationEvent(ApplicationEvent applicationEvent) {
}
}
複製代碼
@Component
public class MyMetaObjectHandler extends MetaObjectHandler {
protected final static Logger logger = LoggerFactory.getLogger(Application.class);
@Override
public void insertFill(MetaObject metaObject) {
logger.info("新增數據庫:");
}
@Override
public void updateFill(MetaObject metaObject) {
logger.info("修改數據庫:");
}
}
複製代碼
由於要避免一些啓動的時候爆出的一些錯誤,我還新建了一個空白的config.properties文件,裏面什麼都沒有。數據庫
好的,配置文件基本上已經妥了,可是若是這個時候啓動服務,依然會報錯,由於你沒有配套的controller,serivice,mapper等等文件。apache
所以,我建立了一個實體類,用來專門生成代碼。json
@Component
public class CreateCodeMethod {
/**
*
* @Title: main
* @Description: 生成
* @param args
*/
public static void main(String[] args) {
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir("D://"); //輸出文件路徑
gc.setFileOverride(true);
gc.setActiveRecord(false);// 不須要ActiveRecord特性的請改成false
gc.setEnableCache(false);// XML 二級緩存
gc.setBaseResultMap(true);// XML ResultMap
gc.setBaseColumnList(false);// XML columList
gc.setAuthor("wuchong");// 做者
// 自定義文件命名,注意 %s 會自動填充表實體屬性!
gc.setControllerName("%sController");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setMapperName("%sMapper");
gc.setXmlName("%sMapper");
mpg.setGlobalConfig(gc);
// 數據源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123456");
dsc.setUrl("jdbc:mysql://localhost:3306/myblog");
mpg.setDataSource(dsc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
// strategy.setTablePrefix(new String[] { "sys_" });// 此處能夠修改成您的表前綴
strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
strategy.setInclude(new String[] { "permission","permission_manage","user"}); // 須要生成的表
strategy.setLogicDeleteFieldName("record_status");//設置邏輯刪除的字段
strategy.setSuperServiceClass(null);
strategy.setEntityLombokModel(true);
strategy.setSuperServiceImplClass(null);
strategy.setSuperMapperClass(null);
mpg.setStrategy(strategy);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("blog");
pc.setController("controller");
pc.setService("service");
pc.setServiceImpl("service.impl");
pc.setMapper("mapper");
pc.setEntity("entity");
pc.setXml("xml");
mpg.setPackageInfo(pc);
// 執行生成
mpg.execute();
}
}
複製代碼
這裏必需要講一下個人表結構了,以我mysql的表結構爲例子:
有了這個註解,你在調用mybatisPlus的刪除方法的時候,它就會邏輯刪除你的數據了。
好的,生成的各個java文件,我是配置到了D盤的blog文件夾中,取出來,放到項目中。
如圖所示:
打開網頁,輸入網址:localhost:1111(ps:這個eureka服務端是上一篇文章創建的,先講eureka服務端啓動,再來啓動咱們剛剛建立的eureka客戶端)
點擊:http://192.168.1.5:2222/permission,能夠進入到swagger頁面,以下圖所示
我搭建的這個eureka客戶端,其實是能夠知足單純只是本身玩一玩的開發需求了。
須要注意的地方是,你能夠按照你本身的愛好來建立文件,可是必定要注意配置文件,你好比說,在application.properties文件中有這麼一個配置: