大连网站优化多少钱,做网站导航条怎么弄,seo没什么作用了,wordpress网站专题目的#xff1a;在本地搭建一个简单的openfeign使用场景#xff0c;测试查询、新增等功能
平台#xff1a;win10
技术栈#xff1a;Springboot, SpringCloud, Nacos, Mybatis, MySql, Logback
框架作用说明#xff1a;
Nacos用于服务注册#xff0c;将provider应用注…目的在本地搭建一个简单的openfeign使用场景测试查询、新增等功能
平台win10
技术栈Springboot, SpringCloud, Nacos, Mybatis, MySql, Logback
框架作用说明
Nacos用于服务注册将provider应用注册到Nacos客户端订阅该服务然后用openfeign调用provider提供的rest接口数据库采用mysqlmybatis提供orm功能日志用logback
项目架构如下 总共启动了4个应用
nacos server, feigndemo (provider), feignclientdemo(client), mysql server
Nacos server采用单机模式启动
startup.cmd -m standalone
MySQL
创建数据库、用户给用户授权然后建表
create database feigndemo default character set utf8mb4;
use feigndemo;
create user feigndemolocalhost identified by 123456;
-- grant privileges
Grant SELECT, insert, create,delete,update,alter,drop on feigndemo.* to feigndemolocalhost with grant option;create table product (id int(16),name varchar(64),price double(10,2),delete_flag tinyint(1) not null default 0 comment 0:未删除1:已删除,create_time datetime not null default CURRENT_TIMESTAMP comment 创建时间,update_time datetime not null default CURRENT_TIMESTAMP comment 更新时间
) ENGINEInnoDB DEFAULT charsetutf8mb4;
feigndemo主要源码
pom.xml
?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.6.6/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdorg.example/groupIdartifactIdfeigndemo/artifactIdversion1.0-SNAPSHOT/versionnamefeigndemo/name!-- FIXME change it to the projects website --urlhttp://www.example.com/urlpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.target/propertiesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion2021.0.3/versiontypepom/typescopeimport/scope/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion2.2.7.RELEASE/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactIdversion3.1.3/version/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-validation/artifactId/dependencydependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion2.2.2/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.33/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project
配置文件
application.yml
server:port: 8088spring:datasource:url: jdbc:mysql://localhost:3306/feigndemo?characterEncodingUTF-8username: feigndemopassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverapplication:name: feigndemocloud:nacos:discovery:server-addr: 127.0.0.1:8848namespace: b2b3c55a-abe5-47a4-a47e-03c57138d1d7mybatis:mapper-locations: classpath*:mapper/*.xml
logback-spring.xml
?xml version1.0 encodingUTF-8?
configurationcontextName${APP_NAME}/contextNamespringProperty nameAPP_NAME scopecontext sourcespring.application.name/springProperty nameLOG_FILE scopecontext sourcelogging.file defaultValue../logs/springProperty nameLOG_POINT_FILE scopecontext sourcelogging.file defaultValue../logs/point/springProperty nameLOG_MAXFILESIZE scopecontext sourcelogback.filesize defaultValue50MB/springProperty nameLOG_FILEMAXDAY scopecontext sourcelogback.filemaxday defaultValue7/springProperty nameServerIP scopecontext sourcespring.cloud.client.ip-address defaultValue0.0.0.0/springProperty nameServerPort scopecontext sourceserver.port defaultValue0000/!-- 彩色日志 --!-- 彩色日志依赖的渲染类 --conversionRule conversionWordclrc converterClassorg.springframework.boot.logging.logback.ColorConverter/conversionRule conversionWordewtpcconverterClassorg.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter/!-- 彩色日志格式 --property nameCONSOLE_LOG_PATTERNvalue%clrc(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} [%clrc(%X{traceId}){yellow},%clrc(%X{X-B3-TraceId}){yellow}] %clrc(%level){blue} %clrc(%logger){cyan} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%ewtpc}/property nameCONSOLE_LOG_PATTERN_NO_COLORvalue%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{traceId},%X{X-B3-TraceId}] %level %logger %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%ewtpc}/!-- 控制台日志 --appender nameSTDOUT classch.qos.logback.core.ConsoleAppenderwithJansitrue/withJansiencoderpattern${CONSOLE_LOG_PATTERN}/patterncharsetUTF-8/charset/encoder/appender!-- 按照每天生成常规日志文件 --appender nameDAILY_LOG classch.qos.logback.core.rolling.RollingFileAppenderfile${LOG_FILE}/${APP_NAME}/${APP_NAME}.log/file!-- 基于时间的分包策略 --rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicyfileNamePattern${LOG_FILE}/${APP_NAME}/${APP_NAME}.%d{yyyy-MM-dd}.%i.log/fileNamePatternmaxFileSize100MB/maxFileSize!--保留时间,单位:天--maxHistory30/maxHistory/rollingPolicyencoderpattern${CONSOLE_LOG_PATTERN_NO_COLOR}/patterncharsetUTF-8/charset/encoder/appenderlogger namecom.ulisesbocchio levelINFO/logger namecom.netflix levelINFO/logger namecom.zaxxer.hikari levelINFO/logger namecom.baomidou levelINFO/logger nameorg.example.spc levelINFO/root levelINFOappender-ref refSTDOUT/appender-ref refDAILY_LOG//root
/configuration
main方法类App.java
EnableDiscoveryClient
SpringBootApplication
public class App
{public static void main( String[] args ){SpringApplication.run(App.class, args);}
}
ProductMapper.java
package org.example.spc.consumer.mapper;import org.apache.ibatis.annotations.Param;
import org.example.spc.consumer.model.Product;
import org.springframework.stereotype.Repository;import java.util.List;//Mapper
Repository
public interface ProductMapper {Product findById(Param(id) int id);void insert(Product product);ListProduct findAll();
}
ProductMapper.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtdmapper namespaceorg.example.spc.consumer.mapper.ProductMapperselect idfindById parameterTypeint resultTypeorg.example.spc.consumer.model.ProductSELECT id, name, price FROM product WHERE id #{id}/selectselect idfindAll resultTypeorg.example.spc.consumer.model.ProductSELECT id, name, price FROM product/selectinsert idinsert parameterTypeorg.example.spc.consumer.model.ProductINSERT into product (id, name, price)VALUES (#{id}, #{name}, #{price})/insert
/mapper
ProductServiceImpl.java
Service
public class ProductServiceImpl implements ProductService {private static final Logger logger LoggerFactory.getLogger(ProductServiceImpl.class);Autowiredprivate ProductMapper productMapper;Overridepublic Product getProduct(int id) {logger.info(Find product by id : {}, id);return productMapper.findById(id);}
...
}
ProductController.java
RestController
RequestMapping(/product)
public class ProductController {private static final Logger LOGGER LoggerFactory.getLogger(ProductController.class);Autowiredprivate ProductService productService;GetMapping(/{id})ResponseBodypublic Product find(PathVariable(id) int id) {return productService.getProduct(id);}GetMapping(/all)ResponseBodypublic ListProduct findAll() {return productService.findAll();}PostMapping(/add)public ResponseEntity addProduct(RequestBody Product product) {return productService.addProduct(product);}}
feignclientdemo重要源码和配置
pom.xml
?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.6.6/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdorg.example/groupIdartifactIdfeignclientdemo/artifactIdversion1.0-SNAPSHOT/versionnamefeignclientdemo/name!-- FIXME change it to the projects website --urlhttp://www.example.com/urlpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.target/propertiesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion2021.0.3/versiontypepom/typescopeimport/scope/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion2.2.7.RELEASE/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactIdversion3.1.3/version/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactIdexclusionsexclusiongroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-ribbon/artifactId/exclusion/exclusions/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-validation/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build
/project
application.yml
server:port: 18728spring:application:name: feignclientdemocloud:nacos:discovery:server-addr: 127.0.0.1:8848namespace: b2b3c55a-abe5-47a4-a47e-03c57138d1d7
FeignClientDemoApp.java (入口类)
package org.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;EnableFeignClients
EnableDiscoveryClient(autoRegister false)
SpringBootApplication
public class FeignClientDemoApp
{public static void main( String[] args ){SpringApplication.run(FeignClientDemoApp.class, args);}BeanLoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}
ProductService.java
package org.example.spc.consumer.service;import org.example.spc.consumer.model.Product;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;import java.util.List;FeignClient(feigndemo) // 括号中的值必须和provider注册的应用名一致
public interface ProductService {GetMapping(/product/{id})Product getProduct(PathVariable int id);GetMapping(/product/all)ListProduct findAll();PostMapping(/product/add)ResponseEntity addProduct(RequestBody Product product);} ProductController.java
package org.example.spc.consumer.controller;import org.example.spc.consumer.model.Product;
import org.example.spc.consumer.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;import java.util.List;/*** 功能描述** auhtor sunlei* since 2024/7/28 17:38*/
RestController
RequestMapping(/product)
public class ProductController {private ProductService productService;Autowiredpublic ProductController(ProductService productService) {this.productService productService;}GetMapping(/{id})ResponseBodypublic Product find(PathVariable(id) int id) {return productService.getProduct(id);}GetMapping(/all)ResponseBodypublic ListProduct findAll() {return productService.findAll();}PostMapping(/add)public ResponseEntity addProduct(RequestBody Product product) {return productService.addProduct(product);}}
部署好后的调用结果如下
GET请求 POST请求(用ApiFox调用)