Springboot启动后自动执行的方法

继承CommandLineRunner接口,实现run方法。

@SpringBootApplication
public class Application implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);

    }

    @Override
    public void run(String... args) throws Exception {
        //程序启动后执行的操作
    }
}

异步一次回调变同步直接返回

suspendCoroutine

适用于一次一次调用一次返回结果,返回值用cont.resume返回;错误的情况通过cont.resumeWithException抛异常出去.注意这是个挂起方法.

suspend fun purchase() = suspendCoroutine<String> { cont ->

    helper.setListenner(object:Listenner{
        override fun onResult(result){
            if(result != null) cont.resume(result)
            else cont.resumeWithException(Exception())
        }
    })
    helper.exe()

}

feign连接超时问题

springboot默认会设置熔断器,默认超时时间和ribbon一样,造成有时候会直接切断请求。
修改方法就是主动设置超时时间。

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 6000
ribbon:
  ReadTimeout: 60000
  ConnectTimeout: 60000

js解析单引号json

"{'tag':null,'user':'137239','code':'0','message':'登陆成功','token':'69af86a661e76448b177767db58c4bcc'}"

JSON.parse可以解析普通的双引号json,像这种单引号的json需要采用另一种解析方式。

eval("("+text+")")

如果用react-native的fetch框架获取数据时不能用response.json()直接取json对象,因为解析不出来,需要用response.text()先取出string来然后发现是单引号的json字符串然后选择eval函数解析成json对象。

hyper-v 网络

NAT

安装微软提供的驱动插件

下载地址安装方法见pdf

如果是winserver 2008 r2下安装centos7,请下载
LinuxIC-4.2.5-2

在hyper-v管理器里新建虚拟网络交互器,选内部形式
在windows的网络适配器设置里把能上网的网络共享给新建的内部虚拟网卡
进hyper-v的Linux系统里重启network
systemctl restart network
查看有没有生成ip
ip addr
ping一下
通过修改网卡文件将dhcp网络改成static,并设置IPADDR,GATEWAY,DNS1

/etc/sysconfig/network-scripts

BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.137.100
GATEWAY=192.168.137.1
DNS1=8.8.8.8
重启一下network
systemctl restart network

也可以用dhcp类型,就设置DNS,ip自动获取.

BOOTPROTO=dhcp
ONBOOT=yes
DNS1=8.8.8.8

桥接

共存

nat用dhcp,桥接用静态,不设置gateway

接收500以上的statuscode

retrofit

错误内容在errorBody里,用string()取出json字符串,解析json,得到status字段的值。

fun <T> Response<T>.status(): Int {
    return if (this.code() < 500 || this.errorBody() == null) {
        this.code()
    } else {
        val error = this.errorBody()!!.string()
        val jsonObject = JSONObject(error)
        jsonObject.getInt("status")
    }
}

jquery

error方法返回的xhr.responseJSON是错误的返回实体,xhr.responseJSON.status就是自定义的状态码

$.post(url, data, function (result) {}).error(function (xhr) {
        xhr.responseJSON.status
        xhr.responseJSON.message
        });

react-navigation hide titlebar

最关键的就是这句话,也就是路由可以设置一些属性。

navigationOptions: {header: null}
import {
    createStackNavigator,
} from 'react-navigation';

import Playing from './playing/index';

const App = createStackNavigator({
    Home: {screen: Playing, navigationOptions: {header: null}},
    // Profile: { screen: ProfileScreen },
});

export default App;

react-native最简单的页面跳转

  1. 加依赖
    npm install --save react-navigation
    
  2. 新建导航页面 index.js
    路由顺序很重要,第一个就是启动页面,其他的需要手动跳转.
    screnn的值就是需要跳转的页面

import {
  createStackNavigator,
} from 'react-navigation';

import HomeScreen from '.HomeScreen;
import ProfileScreen from '.ProfileScreen;

const App = createStackNavigator({
  Home: { screen: HomeScreen },
  Profile: { screen: ProfileScreen },
});

export default App;
  1. 入口页面注册导航页面
import { AppRegistry } from 'react-native';
import App from './app/index';

AppRegistry.registerComponent('SuperKouSuan', () => App);

  1. 页面跳转
    跳转依赖路由名,datas为页面传参
this.props.navigation.navigate('Profile',datas)
  1. 页面接参
    通过key值一个一个取,可以添取不到的默认值.
let data = this.props.navigation.getParam("data","default");