LogUtils

第十节:基于MVC5+Unity+EF+Log4Net的基础结构搭建

妖精的绣舞 提交于 2020-12-19 01:15:02
一. 前言   本节继续探讨一种新的框架搭建模式,框架的结构划分和上一节是相同的,本节IOC框架换成了Unity,并且采用构造函数注入的方式,另外服务层的封装模式也发生了变化,下面将详细的进行探讨。 (一). 技术选型   1. DotNet框架:4.6   2. 数据库访问:EF 6.2 (CodeFrist模式)   3. IOC框架:Unity 5.8.13   4. 日志框架:log4net 2.0.8   5. 开发工具:VS2017 (二). 框架目标   1. 一个项目同时连接 多个相同种类 的数据库,在一个方法中可以同时对多个数据进行操作。   2. 支持多种数据库:SqlServer、MySQL、Oracle,灵活的切换数据库。   3. 抽象成支持多种数据库连接方式:EF、ADO.Net、Dapper。 二. 搭建思路 1. 层次划分   将框架分为:Ypf.Data、Ypf.IService、Ypf.Service、Ypf.DTO、Ypf.Utils、Ypf.AdminWeb 六个基本层(后续还会补充 Ypf.Api层),每层的作用分别为:   ①. Ypf.Data:存放连接数据库的相关类,包括EF上下文类、映射的实体类、实体类的FluentApi模式的配置类。   ②. Ypf.IService:业务接口层,用来约束接口规范。   ③. Ypf

【Spring Boot】Spring Boot之整合Sharding-JDBC(java config方式)实现分库分表(水平拆分)

眉间皱痕 提交于 2020-08-05 07:55:17
一、概念先行 1)SQL相关的 逻辑表:水平拆分的数据库(表)的相同逻辑和数据结构表的总称。例:订单数据根据主键尾数拆分为2张表,分别是t_order_0到t_order_1,他们的逻辑表名为t_order。 真实表:在分片的数据库中真实存在的物理表。例:示例中的t_order_0到t_order_1 数据节点:数据分片的最小单元。由数据源名称和数据表组成,例:ds_0.t_order_0;ds_0.t_order_1; 绑定表:指分片规则一致的主表和子表。例如:t_order表和t_order_item表,均按照order_id分片,则此两张表互为绑定表关系。绑定表之间的多表关联查询不会出现笛卡尔积关联,关联查询效率将大大提升。 广播表:指所有的分片数据源中都存在的表,表结构和表中的数据在每个数据库中均完全一致。适用于数据量不大且需要与海量数据的表进行关联查询的场景,例如:字典表,示例中的t 2)分片相关 分片键:用于分片的数据库字段,是将数据库(表)水平拆分的关键字段。例:将订单表中的订单主键的尾数取模分片,则订单主键为分片字段。 SQL中如果无分片字段,将执行全路由,性能较差。 除了对单分片字段的支持,ShardingSphere也支持根据多个字段进行分片。 分片算法:通过分片算法将数据分片,支持通过=、>=、<=、>、<、BETWEEN和IN分片

【Spring Boot】Spring Boot之整合Sharding-JDBC(java config方式)实现分库分表(水平拆分)

♀尐吖头ヾ 提交于 2020-08-05 07:51:53
一、概念先行 1)SQL相关的 逻辑表:水平拆分的数据库(表)的相同逻辑和数据结构表的总称。例:订单数据根据主键尾数拆分为2张表,分别是t_order_0到t_order_1,他们的逻辑表名为t_order。 真实表:在分片的数据库中真实存在的物理表。例:示例中的t_order_0到t_order_1 数据节点:数据分片的最小单元。由数据源名称和数据表组成,例:ds_0.t_order_0;ds_0.t_order_1; 绑定表:指分片规则一致的主表和子表。例如:t_order表和t_order_item表,均按照order_id分片,则此两张表互为绑定表关系。绑定表之间的多表关联查询不会出现笛卡尔积关联,关联查询效率将大大提升。 广播表:指所有的分片数据源中都存在的表,表结构和表中的数据在每个数据库中均完全一致。适用于数据量不大且需要与海量数据的表进行关联查询的场景,例如:字典表,示例中的t 2)分片相关 分片键:用于分片的数据库字段,是将数据库(表)水平拆分的关键字段。例:将订单表中的订单主键的尾数取模分片,则订单主键为分片字段。 SQL中如果无分片字段,将执行全路由,性能较差。 除了对单分片字段的支持,ShardingSphere也支持根据多个字段进行分片。 分片算法:通过分片算法将数据分片,支持通过=、>=、<=、>、<、BETWEEN和IN分片

基于NACOS和JAVA反射机制动态更新JAVA静态常量非@Value注解

巧了我就是萌 提交于 2020-07-27 15:07:25
1.前言 项目中都会使用常量类文件, 这些值如果需要变动需要重新提交代码,或者基于@Value注解实现动态刷新, 如果常量太多也是很麻烦; 那么 能不能有更加简便的实现方式呢? 本文讲述的方式是, 一个JAVA类对应NACOS中的一个配置文件,优先使用nacos中的配置,不配置则使用程序中的默认值; 2.正文 nacos的配置如下图所示,为了满足大多数情况,配置了 namespace命名空间和group; 新建个测试工程 cloud-sm. bootstrap.yml 中添加nacos相关配置; 为了支持多配置文件需要注意ext-config节点,group对应nacos的添加的配置文件的group; data-id 对应nacos上配置的data-id 配置如下: server: port: 9010 servlet: context -path: / sm spring: application: name: cloud - sm cloud: nacos: discovery: server -addr: 192.168 . 100.101 : 8848 #Nacos服务注册中心地址 namespace : 1 config: server -addr: 192.168 . 100.101 : 8848 #Nacos作为配置中心地址 namespace : 1 ext -

【Spring Boot】Spring Boot之整合Sharding-JDBC(java config方式)实现分库分表(水平拆分)

给你一囗甜甜゛ 提交于 2020-04-26 08:54:54
一、概念先行 1)SQL相关的 逻辑表:水平拆分的数据库(表)的相同逻辑和数据结构表的总称。例:订单数据根据主键尾数拆分为2张表,分别是t_order_0到t_order_1,他们的逻辑表名为t_order。 真实表:在分片的数据库中真实存在的物理表。例:示例中的t_order_0到t_order_1 数据节点:数据分片的最小单元。由数据源名称和数据表组成,例:ds_0.t_order_0;ds_0.t_order_1; 绑定表:指分片规则一致的主表和子表。例如:t_order表和t_order_item表,均按照order_id分片,则此两张表互为绑定表关系。绑定表之间的多表关联查询不会出现笛卡尔积关联,关联查询效率将大大提升。 广播表:指所有的分片数据源中都存在的表,表结构和表中的数据在每个数据库中均完全一致。适用于数据量不大且需要与海量数据的表进行关联查询的场景,例如:字典表,示例中的t 2)分片相关 分片键:用于分片的数据库字段,是将数据库(表)水平拆分的关键字段。例:将订单表中的订单主键的尾数取模分片,则订单主键为分片字段。 SQL中如果无分片字段,将执行全路由,性能较差。 除了对单分片字段的支持,ShardingSphere也支持根据多个字段进行分片。 分片算法:通过分片算法将数据分片,支持通过=、>=、<=、>、<、BETWEEN和IN分片

聊聊carrera的GroovyScriptAction

佐手、 提交于 2020-02-27 23:03:09
序 本文主要研究一下carrera的GroovyScriptAction Action DDMQ/carrera-consumer/src/main/java/com/xiaojukeji/carrera/cproxy/actions/Action.java public interface Action { enum Status { FAIL, CONTINUE, FINISH, ASYNCHRONIZED } class UnsupportedDataType extends RuntimeException { } default Status act(UpstreamJob job) { Object data = job.getData(); if (data instanceof byte[]) { return act(job, (byte[]) data); } else if (data instanceof JSONObject) { return act(job, (JSONObject) data); } else { throw new UnsupportedDataType(); } } default Status act(UpstreamJob job, byte[] bytes) { throw new UnsupportedDataType()

如何在构建Android应用程序的发布版本之前删除所有调试日志记录调用?

随声附和 提交于 2020-02-26 11:26:03
根据谷歌的说法, 在将 我的Android应用程序发布到Google Play之前,我必须“ 停用对源代码中任何Log方法的调用 ”。 摘录自 出版物清单的 第3部分: 在构建应用程序以进行发布之前,请确保停用日志记录并禁用调试选项。 您可以通过删除源文件中对Log方法的调用来停用日志记录。 我的开源项目很大,每次发布时手动执行都很痛苦。 此外,删除日志行可能很棘手,例如: if(condition) Log.d(LOG_TAG, "Something"); data.load(); data.show(); 如果我对日志行进行注释,则条件适用于下一行,并且可能不会调用load()。 这种情况是否足够罕见,我可以决定它不应该存在? 那么,是否有更好的源代码级方法呢? 或者可能有一些聪明的ProGuard语法可以有效但安全地删除所有日志行? #1楼 ProGuard将在您的发布版本上为您完成,现在来自android.com的好消息: http://developer.android.com/tools/help/proguard.html ProGuard工具通过删除未使用的代码并使用语义模糊的名称重命名类,字段和方法来缩小,优化和混淆代码。 结果是较小的.apk文件,更难以进行逆向工程。 由于ProGuard使您的应用程序更难以进行逆向工程,因此当您的应用程序使用对安全性敏感的功能

工具类--LogUtils

泄露秘密 提交于 2020-01-06 23:30:57
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、使用步骤 1、在module中引入 implementation 'com.tgcity.utils:Log:1.0.1' 或 implementation 'com.tgcity.utils:Log:latest.release' 2、在您项目中的Application中初始化 //设置LogUtils开关 LogUtils.init(this); 初始化的目的是判断贵app是否是debug环境,当处于debug环境下,输出日志;否则不输出 3、代码使用 LogUtils.e("string"); 二、源码分析 1、输出的日志等级分为V,D,I,W,E,A,分别对应Log.VERBOSE,Log.DEBUG,Log.INFO,Log.WARN,Log.ERROR,Log.ASSERT等各大等级不 2、初始化方法,调用init(context),该方法会进行apk是否是debug环境的校验,当您的app处于debug环境,则输出日志;当处于release环境,则不输出。未调用该方法默认不输出日志。该方法主要是防止生成生产环境时遗忘日志开关的关闭,造成不必要的麻烦。 3、举一例使用方法,e(final Object... contents),您可以通过调用该方法传入一个泛型对象,如果想添加标签

Android WebView详解(二):Android原生与JS互调

谁都会走 提交于 2019-11-28 19:58:00
Android 去调用JS 的代码 通过WebView的loadUrl() 先写一个html,很简单的一个代码,alert显示。 android_load_js.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Android调用 JS 代码demo</title> // JS代码 <script> // Android需要调用的方法 function callJS(){ alert("Android调用了JS的callJS方法"); } </script> </head> </html> 在Activity中 mWebSettings = mWebview.getSettings(); //与JS交互开关 mWebSettings.setJavaScriptEnabled(true); //设置允许JS弹窗 mWebSettings.setJavaScriptCanOpenWindowsAutomatically(true); mWebview.loadUrl("file:///android_asset/android_load_js.html"); //在这我用了一个TextView 点击事件中去调用JS中的方法 beginLoading.setOnClickListener(new View