手把手搭建springCloud框架(二)——eureka客戶端+swagger+mybatisPlus

來開始搭建springCloud的客戶端client服務。html

首先,也是從在線生成了springboot項目。java

在線網址:start.spring.io/mysql

下載下來的是一個壓縮包,解壓以後,用編譯器IDEA打開這個服務。

由於,我是一次性搭建了spingCloud+eureka+swagger+mybatisPlus,因此此次的話,我就一次性給你們展現一下。

也因爲此次的話,不只僅是侷限於這三個配置文件,我還要新增一些配置文件,因此我先把已經搭建成功了的服務的目錄給你們看一下:web

首先是pom.xml文件:

<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

application.properties文件

#服務名
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
複製代碼

啓動類 PermissionApplication.java 文件

圖片: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

swagger的配置文件。

新增配置文件:Swagger2.java

@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();
    }

}
複製代碼

新增配置文件:WebMvcConfig.java

@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);
    }


}
複製代碼

mybatisPlus的配置文件

新增配置文件:MybatisPlusConfig,java

@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();
    }

}
複製代碼

新增配置文件:MybatisPlusSql.java

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) {

    }
}
複製代碼

新增配置文件:MyMetaObjectHandler.java

@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

代碼生成器:CreateCodeMethod.java

@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的表結構爲例子:

能夠看到,個人數據庫的表user中有一個字段record_status,這個字段是我機會用來作邏輯刪除的,相信常常開發業務的小夥伴知道,通常的表數據不會真的物理刪除,只會進行邏輯刪除,而mybatisPlus的能夠簡單的封裝這個邏輯刪除,當你在使用代碼生成器的時候,請注意我在下面的截圖:

我框起來的一段代碼,是爲了保證你在生成實體類的時候,這個record_status字段有着特定的一個註解: @TableLogic

有了這個註解,你在調用mybatisPlus的刪除方法的時候,它就會邏輯刪除你的數據了。

好的,生成的各個java文件,我是配置到了D盤的blog文件夾中,取出來,放到項目中。

如圖所示:

controller文件:

service文件:

ServiceImpl文件:

mapper文件:

mapper.xml文件:

這個時候,能夠開始啓動服務了。

打開網頁,輸入網址:localhost:1111(ps:這個eureka服務端是上一篇文章創建的,先講eureka服務端啓動,再來啓動咱們剛剛建立的eureka客戶端

能夠看到,咱們的服務已經註冊到eureka上去了。

點擊:http://192.168.1.5:2222/permission,能夠進入到swagger頁面,以下圖所示

能夠測試一下了咱們配置的東西是否完善可行了。

總結

我搭建的這個eureka客戶端,其實是能夠知足單純只是本身玩一玩的開發需求了。

須要注意的地方是,你能夠按照你本身的愛好來建立文件,可是必定要注意配置文件,你好比說,在application.properties文件中有這麼一個配置:

這個配置對應的文件,是我建立的一個配置文件 MyMetaObjectHandler.java 所在的地方.

所以,當你準備開始搭建本身的springCloud的時候,必定要注意全部的配置文件,你理所應當的把全部的配置文件看一遍,最好是按照個人文章徹底同樣的搭建一次,而後再按照你的思路來玩才能沒問題。
相關文章
相關標籤/搜索