Ling3常用代码

来自ling
跳转至: 导航搜索

模板相关

<#assign pojo=oneToManyPojo.getOne()>
<#assign many=oneToManyPojo.getMany()>
<#assign ones=oneToManyPojo.getOnes()>
<#assign module=oneToManyPojo.getModule()>
<#assign fields=pojo.getFilterdPojoFields()>
<#assign declarationName = pojo.importType(pojo.getDeclarationName())>
<#assign declarationNameFirstLetterLower = pojo.importType(pojo.getDeclarationNameFirstLetterLower())>
<#assign realPackageAndClassPath = "${pojo.getRealPackageAndClassPath()}">
<#assign masterid = pojo.getDeclarationNameFirstLetterLower()+"Id">


${declarationName}
${declarationNameFirstLetterLower}
${r"..............."}
${declarationNameFirstLetterLower?lower_case}
${module}

docker相关

docker exec -it kafka /bin/bash
cd /opt/kafka/bin
ps -ef | grep ling-cloud-config
cd /alidata/dockerdata/ling/cloud/register
docker build -t 192.168.1.3:8889/ling-cloud-register .
cd *register
mvn install -s D:\noinstall\maven2_spring_cloud\setting.xml -P docker
docker rmi -f 192.168.1.3:8889/ling-cloud-register
docker run -it -d --name register --link kafka:kafka --rm -p 6889:6889 192.168.1.3:8889/ling-cloud-register
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic ling-cloud-register --from-beginning
docker rmi -f 192.168.1.3:8889/ling-cloud-config
docker run -it -d --name config --link register:register -p 6888:6888 --link kafka:kafka --rm 192.168.1.3:8889/ling-cloud-config
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic ling-cloud-config --from-beginning
docker rmi -f 192.168.1.3:8889/ling-cloud-routing
docker run -it -d --name config --link register:register -p 6888:6888 --link kafka:kafka --rm 192.168.1.3:8889/ling-cloud-routing
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic ling-cloud-routing --from-beginning
java -jar /alidata/dockerdata/ling/cloud/ling-cloud-routing/target/ling-cloud-routing.jar \
--eureka.client.serviceUrl.defaultZone=http://192.168.1.3:6889/eureka --eureka.instance.perferIpAddress=true --eureka.instance.hostname=192.168.1.3 &


java -jar /alidata/dockerdata/ling/cloud/ling-cloud-routing/target/ling-cloud-routing.jar --eureka.client.serviceUrl.defaultZone=http://192.168.1.30:6889/eureka --eureka.instance.perferIpAddress=true --eureka.instance.hostname=192.168.1.30
java -jar /alidata/dockerdata/ling/cloud/ling-cloud-config/target/ling-cloud-config.jar --eureka.client.serviceUrl.defaultZone=http://192.168.1.30:6889/eureka --eureka.instance.perferIpAddress=true --eureka.instance.hostname=192.168.1.30
java -jar /alidata/dockerdata/ling/cloud/ling-cloud-register/target/ling-cloud-register.jar --eureka.client.serviceUrl.defaultZone=http://192.168.1.30:6889/eureka --eureka.instance.perferIpAddress=true --eureka.instance.hostname=192.168.1.30

kafka更多命令参考Docker常用服务#kafka

  • -t 表示在新容器内指定一个伪终端或终端,
  • -i表示允许我们对容器内的 (STDIN) 进行交互。
  • -d 标识告诉 docker 在容器内以后台进程模式运行

启动参数

EurekaServerApplication

  • 默认由bootstrap.properties中设置spring.profiles.active=dev决定启动参数,自定义启动参考如下
--spring.profiles.active=dev
--spring.profiles.active=dev --server.port=6889 --eureka.client.serviceUrl.defaultZone=http://127.0.0.1:6889/eureka --eureka.instance.perferIpAddress=true --eureka.instance.hostname=127.0.0.1

ConfigServerApplication

  • 默认由bootstrap.properties中设置spring.profiles.active=native,dev决定启动参数,自定义启动参考如下
  • 这里必须指定2个profile例如native,dev.native决定了config使用svn还是文件,dev决定了使用那套配置能获取到正确的register配置
--spring.profiles.active=native,dev
--spring.profiles.active=native,dev --server.port=6888 --eureka.client.serviceUrl.defaultZone=http://127.0.0.1:6889/eureka --eureka.instance.perferIpAddress=true --eureka.instance.hostname=127.0.0.1

其他配置

  • bootstrap.properties中设置了开发环境的register的位置和使用的config 并使用spring.profiles.active=xxx 告诉程序去config server中名称为routing的配置
  • register的位置和使用的config 由打包时maven的profile决定
  • 非开发环境需要在环境启动参数时设置
--spring.profiles.active=routing --server.port=80 --eureka.client.serviceUrl.defaultZone=http://localhost:${eureka.server.port}/eureka
  • 更多参数参考
--spring.application.name=eit --server.context-path=/eit
--eureka.instance.hostname=127.0.0.1 --eureka.instance.perferIpAddress=true --eureka.client.serviceUrl.defaultZone=http://127.0.0.1:6889/eureka
--spring.cloud.config.discovery.enabled=true
--spring.cloud.config.discovery.service-id=LING-CLOUD-CONFIG
--spring.cloud.config.fail-fast=true
--spring.cloud.config.retry.initial-interval=10000
--spring.cloud.config.retry.multiplier=2
--spring.cloud.config.retry.max-interval=60000
--spring.cloud.config.retry.max-attempts=10

ZuulApplication

  • bootstrap.properties中设置了 register的位置和使用的config 并使用spring.profiles.active=routing 告诉程序去config server中名称为routing的配置
  • application.properties中设置register的内容无效,参见Ling3编码规范#SpringCloud配置加载流程
--spring.profiles.active=routing
--spring.profiles.active=routing --spring.cloud.config.uri=http://localhost:8888/ --server.port=80 --eureka.client.serviceUrl.defaultZone=http://localhost:${eureka.server.port}/eureka

EITApplication

--spring.profiles.active=dev --spring.cloud.config.uri=http://localhost:8888/ --server.port=6002 --eureka.client.serviceUrl.defaultZone=http://localhost:${eureka.server.port}/eureka --spring.application.name=eit-api

EITAppApplication

--spring.profiles.active=dev --spring.cloud.config.uri=http://localhost:8888/ --server.port=6003 --eureka.client.serviceUrl.defaultZone=http://localhost:${eureka.server.port}/eureka --spring.application.name=eit --server.context-path=/eit

velocity,thymeleaf,freemarker

  • spring-boot 1.4开始取消了对velocity支持
  • thymeleaf 包含了大量用于直接显示浏览的冗余代码,效率不高.优势是能直接打开
  • freemarker spring-boot中由freemarker替代velocity
  • 最好的布局还是bootstrape+anglarjs
  • velocity的layout和anglarjs的思想比较相像
  • 所以先用velocity,以后整体转移到anglarjs

spring-cloud

编码规范

  • 项目分三个模块;module.api,module.service,moudle.app
  • moudle.app中路径为
    • html:static/views/module/submodule/xxx.html
    • js:static/views/module/submodule/xxx.js
    • control命名XxxController
angular.module('MetronicApp').controller('XxxController', function($rootScope, $scope, $http, $timeout) {
    $scope.$on('$viewContentLoaded', function() {
        // initialize core components
        App.initAjax();
        Layout.init();
    });
}
    • 路由设置
        • 资源命名规范
        //*** eit
        'eit.dashboard': 'views/eit/dashboard.js',

        //*** eit legal

        'eit.legalList': 'views/eit/legal/legalList.js',
        'eit.legalDetail': 'views/eit/legal/legalDetail.js',
        'eit.headBranchProp': 'views/eit/legal/headBranchProp.js'
        • 资源命名规范
        //*** eit
        'eit.dashboard': 'views/eit/dashboard.js',

        //*** eit legal

        'eit.legalList': 'views/eit/legal/legalList.js',
        'eit.legalDetail': 'views/eit/legal/legalDetail.js',
        'eit.headBranchProp': 'views/eit/legal/headBranchProp.js'

静态变量使用

static/assets/js/config.constant.js
app.constant('API_CONTEXT',{
    "eit":"eit-api"//API_CONTEXT.eit
});
app.controller('LegalListController', ['APP_MEDIAQUERY',
   function(appcontext) {
}]);

常见问题

Load balancer does not have available server for client: eit-api

  • zuul 参数中缺少
--eureka.client.serviceUrl.defaultZone=http://localhost:${eureka.server.port}/eureka
  • app 获取
var app = angular.module("myApp", ["ngTable", "ngResource", "ngTableDemoFakeBackend"]);
(function() {

  app.controller("demoController", demoController);
  demoController.$inject = ["NgTableParams", "$resource"];

  function demoController(NgTableParams, $resource) {
    // tip: to debug, open chrome dev tools and uncomment the following line 
    //debugger;
    
    var Api = $resource("/data");
    this.tableParams = new NgTableParams({}, {
      getData: function(params) {
        // ajax request to api
        return Api.get(params.url()).$promise.then(function(data) {
          params.total(data.inlineCount); // recal. page nav controls
          return data.results;
        });
      }
    });
  }
})();

常用代码

ng-grid

page查询

$scope.gridOptions = {
            // note - we do not set 'virtualPaging' here, so the grid knows we are doing standard paging
            enableSorting: true,
            enableFilter: true,
            rowHeight: 30,
            angularCompileRows: true,
            // debug: true,
            rowSelection: 'multiple',
            enableColResize: true,
            paginationPageSize: 500,
            columnDefs: columnDefs,
            rowModelType: 'pagination',
            datasource: getDataSource()
        };
        $scope.search=function(){
            var dataSource=getDataSource();
            $scope.gridOptions.api.setDatasource(dataSource);
        }
 var getDataSource=function  () {
            var dataSource = {
                // rowCount:1,
                getRows: function (params) {
                    var pageSize=$scope.gridOptions.paginationPageSize;
                    var pageIndex=Math.round(params.startRow/pageSize)+1;
                    console.log(pageIndex+" "+pageSize);
                    $scope.query.pageIndex=pageIndex;
                    $scope.query.pageSize= pageSize;
                    LegalService.findByPage($scope.query).then(function (result) {
                        params.successCallback(result.data.result, result.data.total);
                    },function (result) {

                    });
                }
            };
            return dataSource;
        }