本文采用知识共享 署名-相同方式共享 4.0 国际 许可协议进行许可。
访问 https://creativecommons.org/licenses/by-sa/4.0/ 查看该许可协议。

示例80 to 8080


一开始Firewalld配置为
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
本机无法正常转发,外网局域网访问正常。
原因:

firewalld使用iptables nat PREROUTING链来实现转发端口。
该链不用于回送通过接口发送的数据包,因为回送的数据包不应被路由。

而本机产生的数据包由NAT表的OUTPUT链处理。但是,Firewalld转发暂时不支持OUTPUT,目前解决办法为使用--direct规则将规则添加到OUTPUT链

firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080
firewall-cmd --permanent --direct --add-rule ipv4 nat OUTPUT 0 -p tcp -o lo --dport 80 -j REDIRECT --to-ports 8080
firewall-cmd --permanent --direct --add-rule ipv6 nat OUTPUT 0 -p tcp -o lo --dport 80 -j REDIRECT --to-ports 8080
firewall-cmd --reload

本文采用知识共享 署名-相同方式共享 4.0 国际 许可协议进行许可。
访问 https://creativecommons.org/licenses/by-sa/4.0/ 查看该许可协议。

SELinux

MySQL配置文件中修改了datadir后无法启动, log大致为

    Can't create test file /datadir/boxy.lower-test

很确定没有权限问题, 最后发现是selinux的问题, 自然不能关掉它。

datadir为修改后的数据目录,新建一条规则,指定/datadir目录及其下的所有文件的扩展属性为mysqld_db_t, 此外还有mysqld_log_t、mysqld_etc_t、mysqld_port_t这样

    #semanage fcontext -a -t mysqld_db_t "/datadir(/.*)?"
    #restorecon -Rv /datadir

这里可能需要重启, 貌似还有个即时生效的命令chcon, 未深究.

Client Sock

如果同时修改了sock的目录, 想要本机客户端命令正常工作, 需要在客户端配置文件标签(标签已列出)中同时加上

[client]
socket=/xxxxx
[client-mariadb]
socket=/xxxxx
[mysql]
socket=/xxxxx
[mysql_upgrade]
socket=/xxxxx
[mysqladmin]
socket=/xxxxx
[mysqlbinlog]
socket=/xxxxx
[mysqlcheck]
socket=/xxxxx
[mysqldump]
socket=/xxxxx
[mysqlimport]
socket=/xxxxx
[mysqlshow]
socket=/xxxxx
[mysqlslap]
socket=/xxxxx

如果还有一些命令工作不正常(如mysql_secure_installation), 可在命令后加-S /xx/xxxxx.sock

结束

参考

  1. selinux-and-mysql

本文采用知识共享 署名-相同方式共享 4.0 国际 许可协议进行许可。
访问 https://creativecommons.org/licenses/by-sa/4.0/ 查看该许可协议。

运行时期报错为:
The dependencies of some of the beans in the application context form a
异常为
BeanCurrentlyInCreationException

  • 什么是循环依赖?

当我们有两个(当然也可能是多个)类A、B,但是A依赖于B,但B也依赖与A,这就是循环依赖!
A->B->A...

  • 为什么会发生?

当程序启动,Spring Context加载所有的Bean时,会尝试按他们运行的工作顺序创建Bean,
没发生循环依赖的情况:
A->B->C
这里C依赖于B,B依赖于A,不会发生异常,程序正常编译。
循环依赖的发生于
你使用构造函数注入的时候,其他注入方式不会发生此问题,
因为其他方式会在程序用到这个依赖时,才会注入,而不是发生在Spring Context加载阶段。

  • 处理方法
  1. 重新设计你的程序:
    请不要质疑,你的程序设计发生了问题!,分层问题没有处理好,请重新设计它。
    当然,你还可以尝试以下常用的两种解决方案。

  2. 使用@Lazy注解:
    第一种方法是标记@Lazy注解到你的构造函数的参数内,让Spring懒惰的初始化
    这个Bean,即给这个Bean创建一个代理,当真正使用到这个Bean时才会完全创建。

     @Component
     public class CircularDependencyA {   private CircularDependencyB circB; 
          @Autowired
          public CircularDependencyA(@Lazy CircularDependencyB circB) {
              this.circB = circB;
          }
      }
  3. 使用Seter(Spring文档提出的)或者Field方式注入它:
    同样是依赖在使用到的时候才会创建这个依赖。
    Seter:

      @Component
      public class CircularDependencyA { 
         private CircularDependencyB circB;
    
          @Autowired
          public void setCircB(CircularDependencyB circB) {
              this.circB = circB;
          }
      }

    Field:

      @Component
      public class CircularDependencyA {
          @Autowired
          private CircularDependencyB circB;
     }

- 阅读剩余部分 -

本文采用知识共享 署名-相同方式共享 4.0 国际 许可协议进行许可。
访问 https://creativecommons.org/licenses/by-sa/4.0/ 查看该许可协议。

挑选

  • 青壳爪小、肉嫩、易剥壳
  • 红壳壳硬、粗糙
  • 腹部
  • 是否清澈(透明)
  • 雌雄
  • 壳软,虾黄多
  • 前两对步足短、清澈
  • 壳硬,虾黄少(相对)
  • 前两对步足长、浅红薄膜
  • 虾腮干净
    处理
  • 工具
  • 手套(推荐橡皮)
  • 尖头剪刀
  • 有柄刷子
  • 镊子
  • 水冲
  • 腹部从下到上刷
  • 钳子前端(剪刀支点分界)
  • 四对小爪子(两边齐根)
  • 两边各剪1/3
  • 剪虾腮(膜下面蟹黄小心)
  • 一只一直丢入流动水流(吐出更多赃物)
  • 水开大洗干净(同洗菜,洗干净)
  • 虾眼后面几毫米-喀嚓(剪多了虾黄会出来)
  • 虾身黑色囊状物(胃)拉出来、难则镊子(小水冲)
  • 拉泥肠(拉了煮的时候肉可能会散)
  • 最上面中间一片虾尾,两边撕开三分之一
  • 拉它拉出泥肠
  • 泡水里清洗(快,过水就好)
  • 捞出沥干
    麻辣用料
    小龙虾 1200克
    食用油 160克
    生姜 一块
    洋葱 小半个
    香葱 7、8 根
    青椒 2-3 个
    蒜瓣 10 来瓣
    八角 4 个
    桂皮 1根
    花椒 1小把
    草果 1-2个
    白蔻 12个
    甘草 1枝
    白芷 5片
    香叶 5片
    辣椒 4-10个
    白糖 25-40克
    冰糖 25-40克
    红烧酱油 30克
    生抽 30克
    蒸鱼鼓油 30克
    盐 12-15克
    啤酒 1罐
    清水 1碗
    不辣用料
    蒜 4头
    糖、盐 适量
    小龙虾 2斤
    姜 粗条若干
    葱段 两只大葱
    花椒 适量
    八角 4颗
    千里香 两小撮
    啤酒 一罐
    香叶 5片
    韭菜 一小把
    香菜 三根
    花生碎、芝麻 适量
    生抽 适量
Title - Artist
0:00