本文共 11403 字,大约阅读时间需要 38 分钟。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF’ { “registry-mirrors”: [“https://magantt5.mirror.aliyuncs.com”] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
# --name指定容器名字 -v目录挂载 -p指定端口映射 -e设置mysql参数 -d后台运行sudo docker run -p 3306:3306 --name mysql \-v /mydata/mysql/log:/var/log/mysql \-v /mydata/mysql/data:/var/lib/mysql \-v /mydata/mysql/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORD=root \-d mysql:5.7
说说自己的理解,docker本身内部的一个个容器,如mysql,redis等等,它本身实际上是在linux操作系统下存在的,一个容器,其实是一个完整的系统。因此如果我们想通过外层linux访问docker里面相关容器的内容,我们就要建立端口映射,通过 : 建立大环境下的linux与容器之间的端口映射关系。同时,由于每个容器都是独立的,如果我们想要操作容器的某些文件,如我们想看mysql容器的日志文件,我们就得通过输入命令行,如 docker exec(进入容器) -it(以交互模式)mysql(容器名字或id)进入该容器进行查看,很麻烦,因此,通过-v的方式,将容器内部的文件挂载到linux大环境下,从而达到修改外部文件,即可完成对容器内部文件的修改。
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
docker run -p 6379:6379 --name redis
-v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf—在后台启动,使用redis.conf配置文件
#由于配置了文件挂载,因此我们只需要去linux大环境下更改配置文件即可#在redis.connf中,通过appendonly yes 开起持久化配置选项appendonly yes
服务注册中心,可以理解为一个接受服务的平台,用于管理服务。服务注册到服务中心即可被发现调用
@EnableDiscoveryClient
spring: application: name: mall-order cloud: nacos: discovery: server-addr: localhost:8848
使用Nacos配置中心,可以统一的对微服务配置项进行管理,无需重新重启部署项目。
spring.application.name=mall-couponspring.cloud.nacos.config.server-addr=127.0.0.1:8848
到相应的进行了引用的类上加上@RefreshScope
注解
到Nacos上进行配置管理
(注:当项目中的配置文件配置与Nacos配置中心中的配置重复,优先使用Nacos配置中心的配置)补充:
- 命名空间做环境隔离。在bootstrap.propertis下配置
spring.cloud.nacos.config.namespace=
命名空间,指定特定环境下的文件配置。- 也可以每一个微服务单独做一个命名空间。做到服务之间的隔离。
OpenFeign的作用就是用于远程调用不同服务的接口
/** * 该接口用于远程调用其他服务的功能 * @FeignClient 声明调用哪一个服务 * */@FeignClient("mall-coupon")public interface CouponFeignService { /** * 远程服务的完整路径以及方法名 * */ @RequestMapping("/coupon/coupon/member/list") public R membercoupons();}
@SpringBootApplication@MapperScan("com.cloud.mail.member.dao")#该注解的意思是允许该服务被注册和发现@EnableDiscoveryClient#声明远程调用的接口@EnableFeignClients("com.cloud.mail.member.Feign")public class MailMemberApplication { public static void main(String[] args) { SpringApplication.run(MailMemberApplication.class, args); }}
@Autowired CouponFeignService couponFeignService; /** * 测试远程接口调用 * */ @RequestMapping("/coupons") public R test(){ MemberEntity memberEntity = new MemberEntity(); memberEntity.setNickname("张三"); //远程服务的接口 R membercoupons = couponFeignService.membercoupons(); return R.ok().put("member",memberEntity).put("coupons",membercoupons.get("coupons")); }
网关的作用主要可以用于限流、鉴权、路由转发等
org.springframework.cloud spring-cloud-starter-gateway
spring: qpplication: name: mail-gateway cloud: gateway: routes: - id: admin_route # lb:负载均衡到哪个服务 uri: lb://renren-fast #predicates:断言,所有形如/api/开头的请求,全部路由给叫uri的服务 predicates: - Path=/api/** #filters:路径重写。将请求地址为/api/……的请求路由地址转换成/renren-fast/的地址 filters: - RewritePath=/api/(?/?.*), /renren-fast/$\{segment} nacos: server-addr: 127.0.0.1:8848server: port: 88
@EnableDiscoveryClient
@Configurationpublic class MallCorsConfiguration { @Bean public CorsWebFilter corsWebFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration corsConfiguration = new CorsConfiguration(); //1、配置跨域 corsConfiguration.addAllowedHeader("*"); corsConfiguration.addAllowedMethod("*"); corsConfiguration.addAllowedOrigin("*"); corsConfiguration.setAllowCredentials(true); source.registerCorsConfiguration("/**",corsConfiguration); return new CorsWebFilter(source); }}
。用户向应用服务器请求,应用服务器返回仿伪签名,用户直接根据这个签名上传文件到服务器。
com.alibaba.cloud spring-cloud-starter-alicloud-oss
spring: application: name: mall-product alicloud: access-key: xxx secret-key: xxx oss: endpoint: oss-cn-guangzhou.aliyuncs.com
@Resource OSSClient ossClient; @Test public void testUpload() throws FileNotFoundException{ InputStream inputStream = new FileInputStream("C:\\Users\\Lenovo\\Desktop\\timg.jpg" ); //三个参数,第一个参数是要上传到具体的哪一个bucket,第二个参数是名字,第三个参数是图片字符流 ossClient.putObject("grapesmall","timg.jpg",inputStream); //关闭上传文件流 ossClient.shutdown(); }
@RestControllerpublic class OssController { // 引入 spring-cloud-starter-alicloud-oss 整合后,直接注入OSS client @Autowired OSS ossClient; //加载application.yml中的相关配置到属性中 @Value("${spring.cloud.alicloud.oss.endpoint}") private String endPoint; @Value("${spring.cloud.alicloud.oss.bucket}") private String bucket; @Value("${spring.cloud.alicloud.access-key}") private String accessId; @Value("${spring.cloud.alicloud.secret-key}") private String accessKeySecret; @RequestMapping("/oss/policy") public R policy() { String host = "https://" + bucket + "." + endPoint; // host的格式为 bucketname.endpoint // callbackUrl为 上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实信息。 //String callbackUrl = "http://88.88.88.88:8888"; String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); String dir = format + "/"; // 用户上传文件时指定的前缀。 // 创建OSSClient实例。如果在maven依赖里引入的是sdk,不是oss与springboot的整合包的话。 //OSS ossClient = new OSSClientBuilder().build(endPoint, accessId, accessKeySecret); MaprespMap = null; try { long expireTime = 30; long expireEndTime = System.currentTimeMillis() + expireTime * 1000; Date expiration = new Date(expireEndTime); PolicyConditions policyConds = new PolicyConditions(); policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000); policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir); String postPolicy = ossClient.generatePostPolicy(expiration, policyConds); byte[] binaryData = postPolicy.getBytes("utf-8"); String encodedPolicy = BinaryUtil.toBase64String(binaryData); String postSignature = ossClient.calculatePostSignature(postPolicy); respMap = new LinkedHashMap (); respMap.put("accessid", accessId); respMap.put("policy", encodedPolicy); respMap.put("signature", postSignature); respMap.put("dir", dir); respMap.put("host", host); respMap.put("expire", String.valueOf(expireEndTime / 1000)); } catch (Exception e) { // Assert.fail(e.getMessage()); System.out.println(e.getMessage()); } finally { ossClient.shutdown(); } return R.ok().put("data",respMap); }}
org.springframework.beans.factory.UnsatisfiedDependencyException:Error creating bean with name 'attrAttrgroupRelationController': Unsatisfied dependency expressed through field 'attrAttrgroupRelationService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'attrAttrgroupRelationService': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.BeanCreationException:Error creating bean with name 'attrAttrgroupRelationDao' defined in file
解决:
网上方法参考之后判定不是注解的问题,也不是没有exlude的问题。初步判定为springboot版本问题。将springboot版本从2.3.10降至2.1.8,springcloud从H版降至G版即可。注意springboot-springcloud-springcloud alibaba三者之间对应的版本关系
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.### The error may exist in com/cloud/mail/product/dao/CategoryDao.java (best guess)### The error may involve com.cloud.mail.product.dao.CategoryDao.selectList### The error occurred while executing a query### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
解决:
查询网上攻略,说是jdk1.8版本导致SSL调用权限出现问题。只需要在连接数据库的时候,加上userSSL=false即可。无需到java.security中删除SSLV3协议。
解决:
==在基本数据类型比较的是值相等,在引用类型比较的是指针地址。equals本质上也是比较的指针地址,但是在String,Int等类中方法被重写,比较的是值。而且值得注意的是,Int类型范围是-128~127,超出这个封你为会重新创建一个对象。
***************************APPLICATION FAILED TO START***************************Description:Application failed to connect to Nacos server: ""Action:Please check your Nacos server config
解决:
springboot项目整合springcloud-alibaba-nacos-config时一旦导入配置中心来做配置管理时的jar时,就必须配置管理中心的地址,报以上错误就是因为没有在bootstrap.properties/yml文件中配置相关地址
解决:
VM3455 htmlfile:8 Uncaught DOMException: Blocked a frame with origin
解决:
检查发现,在Feign接口上没有著名是调用的哪个服务,在FeignClient后应该写上需要调用的微服务接口才行,如:@FeignClient(“mall-coupon”)
failed to req API:/nacos/v1/ns/instance after all servers([localhost:8848]) tried: failed to req API:localhost:8848/nacos/v1/ns/instance. code:500 msg: java.net.ConnectException: Connection refused: connect
解决:
不知道什么问题,重启Nacos服务器即可。
Lombok注解@Builder建造者模式与MybatisPlus不兼容?在使用@Builder建造者模式,使用mybatisPlus返回该实体类List集合数据的时候,报如下错误:
Cannot determine value type from string 'xxxxxx'
解决:
1、不使用建造者模式,通过新建对象的方式创造对象。 2、添加无参构造和有参构造即可。
转载地址:http://fcqof.baihongyu.com/