- log4j配置
yy爱yy
#log4j.rootLogger配置的是大于等于当前级别的日志信息的输出#log4j.rootLogger用法:(注意appenderName可以是一个或多个)#log4j.rootLogger=日志级别,appenderName1,appenderName2,....#log4j.appender.appenderName2定义的是日志的输出方式,有两种:一种是命令行输出或者叫控制台输出,另一
- spring如何整合druid连接池?
惜.己
springspringjunit数据库javaidea后端xml
目录spring整合druid连接池1.新建maven项目2.新建mavenModule3.导入相关依赖4.配置log4j2.xml5.配置druid.xml1)xml中如何引入properties2)下面是配置文件6.准备jdbc.propertiesJDBC配置项解释7.配置druid8.测试spring整合druid连接池1.新建maven项目打开IDE(比如IntelliJIDEA,Ecl
- 微服务分布式架构中,如何实现日志链路跟踪?
2401_84048542
程序员架构微服务分布式
MDC(MappedDiagnosticContext,映射调试上下文)是log4j和logback提供的一种方便在多线程条件下记录日志的功能。MDC可以看成是一个与当前线程绑定的Map,可以往其中添加键值对。MDC中包含的内容可以被同一线程中执行的代码所访问。当前线程的子线程会继承其父线程中的MDC的内容。当需要记录日志时,只需要从MDC中获取所需的信息即可。MDC的内容则由程序在适当的时候保存
- 【数据结构】字符串与JSON字符串、JSON字符串及相应数据结构(如对象与数组)之间的相互转换
理想青年宁兴星
数据结构数据结构jsonjava
前言:下面打印日志用的是FastJSON依赖库中的@Log4j2。依赖:com.alibabafastjson1.2.80目录普通字符串->json字符串json字符串->普通字符串java对象->json字符串json字符串->java对象普通字符串->json字符串代码:publicstaticvoidmain(String[]args){Strings="ningxingxing";Stri
- springboot整合Logback
星空下夜猫子
springbootlogback后端
Logback介绍描述Logback是由log4j创始人设计的另外一种开源日志组件,性能比log4j要好。相对是一个可靠、通用、快速而又灵活的Java日志框架。Logback主要分三个模块1、logback-core:其他两个模块的基础模块2、logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j。API,可以很方便地更换成其它日志系统,如log4j或JDK14L
- log4jdbc使用介绍
leechiwi
log4jdbc
0前言使用java进行数据库操作时最痛苦的莫过于拼接SQL语句。在实际运行时往往需要查看实际生成的SQL语句和实际传入的参数,或许还会有查看SQL执行时间等的需求。无论原生JDBC、dbutils、mybatis还是hibernate,使用log4j等日志框架可以看到生成的SQL,但是占位符和参数总是分开打印的。实在是不太友好。显示如下的效果:select*fromt_userwhereage>?
- Log4j日志脱敏记录一下
IAmZRH
JAVAjavalog4j
前言在项目上线环境中,需要记录程序运行时产生的各种错误信息、状态信息、调试信息、执行时间记录等日志信息。可以用于查找问题、定位数据等等操作。日志的具体实现可以有log4j和logback等,这里我们使用SLF4J作为日志系统的实现。使用SLF4J使用idea工具可以安装lombok插件,并引入maven包:org.projectlomboklombok1.18.4在需要打印日志的类上增加@Slf4
- log4j2 与 log4j使用时的几点小区别 - log4j2上手说明
CoderCodingNo
Java学习log4j单元测试
虽然log4j2目前还是beta版,不过OneCoder已经忍不住要尝试一下。跟使用log4j比起来,上手上主要的区别有。1、依赖的jar包。使用slf4j+log4j2时,依赖的jar包如下:(gradle配置,Maven对照修改即可)dependencies{compile("org.apache.logging.log4j:log4j-api:$log4j_version","org.apa
- log4j日志封装说明—slf4j对于log4j的日志封装-正确获取调用堆栈
CoderCodingNo
Java学习log4j
日志是项目中必用的东西,日志产品里最普及应该就是log4j了。(logback这里暂不讨论。)先看一下常用的log4j的用法,一般来说log4j都会配合slf4j或者common-logging使用,这里已slf4j为例。添加gradle依赖:dependencies{compile('log4j:log4j:1.2.17','org.slf4j:slf4j-api:1.7.5','org.slf
- Java开发常用类库
白与微光
Java开发常用类库参考https://cloud.tencent.com/developer/article/1522665https://segmentfault.com/a/1190000039359549一、日志相关类库Log4j/Log4j2:Apache的一个开源项目,高度可配置Logback:开源日志组件JUL:JDK自带日志库,也就是java.util.loggingJCL:Jak
- log4j 1.x 日志输出线程以唯一ID的形式配置
&loopy&
log4j单元测试
在Log4j1.x中,直接以线程ID(如Java中的Thread.currentThread().getId()返回的ID)的形式记录日志是可行的,但Log4j1.x本身并不直接提供一个内建的、自动将每个线程ID转换为“同一时间段内唯一ID”的机制。线程ID本身在JVM的上下文中就是唯一的(直到它被回收并重用,但这种情况在大多数应用中很罕见),但它不是跨JVM或跨系统唯一的。如果你的需求是确保即使
- Log4j 1.x如何升级到Log4j 2.x
&loopy&
log4j单元测试
Log4j1.x升级到Log4j2.x是一个涉及多个步骤的过程,主要包括删除旧版本、添加新版本依赖、配置新版本的配置文件等。以下是一个详细的升级步骤指南:一、准备阶段了解当前项目依赖:检查项目中所有使用Log4j1.x的地方,包括jar包和配置文件(如log4j.properties)。确定项目中是否还使用了与Log4j1.x相关的其他库,如slf4j-log4j12。备份当前配置:在进行任何更改
- log4j动态加载配置文件
MrMoving
log4jlog4jjavaapache
应用场景与问题当项目在运行时,我们如果需要修改log4j1.X或者log4j2的配置文件,一般来说我们是不能直接将项目停止运行再来修改文件重新部署的。于是就有这样一个问题:如何在不停止当前项目的运行的情况下,让系统能够自动地监控配置文件的修改状况,从而实现动态加载配置文件的功能?而log4j1.X和log4j2的差别略大,各自应该怎么实现这个功能?log4j1.X动态加载配置文件log4j1.X提
- SpringBoot Maven 升级自带jar包版本
呆呆a
jarmavenspringboot
当SpringBoot自带jar包版本较低时如图:想要升级log4j-to-slf4j到更高版本,需要在pom.xml文件中做修改:org.springframework.bootspring-boot-starterorg.apache.logging.log4jlog4j-to-slf4jorg.apache.logging.log4jlog4j-to-slf4j2.17.0org.apach
- JAVA XML转JSON工具类
张志飞
xmljson
packagecom.cm.util.xmlutl;importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;importorg.apache.log4j.Logger;importorg.dom4j.*;importjava.io.File;importjava.io.FileInputStream;im
- SpringBoot+Kafka+ELK 完成海量日志收集(超详细)
2401_83703797
程序员springbootkafkaelk
SpringBoot项目准备引入log4j2替换SpringBoot默认log,demo项目结构如下:pomIndexController测试Controller,用以打印日志进行调试InputMDC用以获取log中的[%X{hostName}]、[%X{ip}]、[%X{applicationName}]三个字段值NetUtil启动项目,访问/index和/ero接口,可以看到项目中生成了app
- SparkStreaming业务逻辑处理的一些高级算子
看见我的小熊没
sparkStreamingscalasparkbigdatascala
1、reduceByKey reduceByKey是按key进行计算,操作的数据是每个批次内的数据(一个采集周期),不能跨批次计算。如果需要实现对历史数据的跨批次统计累加,则需要使用updateStateByKey算子或者mapWithState算子。packagecom.sparkscala.streamingimportorg.apache.log4j.{Level,Logger}impor
- IDEA创建SSM(Spring+SpringMVC+Mybatis)项目-Maven版
2401_85958214
intellij-ideaspringmybatis
数据库的密码password=admin定义初始连接数initialSize=1定义最大连接数maxActive=20定义最大空闲maxIdle=20定义最小空闲minIdle=1定义最长等待时间maxWait=600004.log4j.properties#日志输出级别log4j.rootLogger=debug,stdout,D,E#设置stdout的日志输出控制台log4j.appender
- Java日志详解
思静语
#日志java
文章目录概述日志级别日志框架LogBackLog4jSlf4j查看日志Log4j2和Logback都支持异步日志常见的日志管理系统日志收集分析概述日志的定义:程序执行过程中,记录程序运行的情况的信息日志的作用:Log日志,主要用于记录程序运行的情况,以便于程序在部署之后的排错调试等,也有利于将这些信息进行持久化(如果不将日志信息保存到文件或数据库,则信息便会丢失)。日志级别1、日志级别针对不同的场
- springboot整合shiro安全框架
heromps
Springboot安全apache
shiro快速开始1.导入依赖org.apache.shiroshiro-core1.8.0org.slf4jjcl-over-slf4j1.7.21org.slf4jslf4j-log4j121.7.21log4jlog4j1.2.17org.apache.shiroshiro-core1.8.02.配置文件shiro.ini[users]#user'root'withpassword'secr
- MyBatis框架搭建(利用Maven技术)
秋意钟
mybatismavenjava
一、pom.xml配置文件导入MyBatis框架包以及所需仓库(Maven技术在云端下载)4.0.0com.bdqnT369-MyBatiswar1.0-SNAPSHOTT369-MyBatisMavenWebapphttp://maven.apache.orgcom.mysqlmysql-connector-j8.2.0org.mybatismybatis3.5.16log4jlog4j1.2.
- 日志文件log4j
T_Y9943
工作记录log4jjunit
今天在处理一个文件,不打印日志的情况,刚好其他项目是logback,这个项目是log4j。另外这个项目中的logback.xml未生效。应该和pom文件有一点关系。不过懒得改了。能用就行。log4j的DailyRollingFileAppender,在当天不会显示出来。(困扰我许久)学习的详细配置如下:log4j配置详解
- MyBatis 环境搭建 2019-03-25
琴匣自鸣
MyBatis各版本下载地址点击Spring各版本下载地址点击Mybatis详解http://www.mybatis.org/mybatis-3/zh/configuration.html记录下犯过的错误1.驱动driver单词写错2.数据库驱动大小写不对3.url地址写错4.log4j需要配置文件没加初步搭建环境,准备工作:Mybatis.jarLog4j.jar数据库驱动jar注意Mybati
- 如何跟踪log4j漏洞原理及发现绕WAF的tips
H_00c8
image.pnglog4j漏洞的形成原因已经有很多分析文章了,这里说一说我是如何在了解到有漏洞后,跟进漏洞产生原理的,以及发现的一些绕WAFtips跟进漏洞产生原因的思路如何发现漏洞产生原因的了解到log4j并不支持,基于这一点,可以做个简单的实验在这里插入图片描述空格和尖括号同样报错,就不重复截图了。回到前面提到的2.15.0-rc1版本对JndiManager#lookup方法的修复情况,并
- JSP/JAVAWEB/SSM/J2EE高考志愿填报推荐系统的开发
计算机程序设计开发
javamysqljavawebssm推荐系统
目录1、概述2、功能描述3、数据表4、目录结构5、实现过程5.1SRC目录5.2webroot前端文件6、最终效果6.1前台用户效果6.2后台管理员用户效果1、概述开发环境:jdk1.8、tomcat7.0、mysql5.2开发工具:idea2019.3.1、navicat15编程语言后端:java;框架和引用的包:JavaBeanServletMVC、log4j.jar编程语言前端:JSP、ht
- 日志框架整理--logback
杨愁心
Java-log
logback是有log4j创始人设计的又一个开源日志框架logback当前分为三个模块:logbakc-core,logback-classic和logback-accesslogback-core:是其他两个模块的基础模块logback-classic:是log4j的一个改良版本。此外logback-classic完整实现SLF4JAPI,所以可以很方便的更换成其他日志系统,如log4j或JD
- java操作zookeeper
shuair
zookeeperzookeeper
java操作zookeeper文档linux安装java-centos安装java-linux配置java环境变量zookeeper单机安装zookeeper集群安装zookeeper客户端命令行操作、节点类型及监听器zookeeper集群写数据原理java操作zookeeper依赖信息junitjunittestorg.apache.logging.log4jlog4j-core2.8.2org
- How to do logging in C# with log4net
weixin_30216561
c#开发工具java
IfyouarewritingservercodeinC#ortoalesserextentdesktop/clientthenit'sagoodideatoincludeloggingcodesowhensomethinggoeswrongyouknowwheretostartlooking.TheJavaworldhasdonethesameforyearsandApachelog4jisav
- 深入理解Spring Boot日志框架与配置
一休哥助手
Springspringboot后端
目录SpringBoot日志框架概述SpringBoot默认日志框架:Logback日志配置文件日志级别的调整日志输出配置日志格式化日志轮转和归档集成其他日志框架日志管理工具最佳实践总结SpringBoot日志框架概述SpringBoot支持多种日志框架,如Logback、Log4j2和JavaUtilLogging(JUL)。其中,Logback是SpringBoot默认使用的日志框架。Spri
- 【Apache】漏洞
B1ackMa9ic
apache网络安全web安全网络攻击模型
文章目录Apache漏洞1.ApacheHTTPD多后缀解析漏洞2.ApacheSSI远程命令执行漏洞3.ApacheHTTP路径穿越漏洞4.ApacheHTTPSSRF漏洞5.Apachelog4j26.ApacheshiroApache漏洞1.ApacheHTTPD多后缀解析漏洞主要利用方式:文件类型欺骗:构造example.php.jpg的文件(只要一个文件含有.php后缀的文件即将被识别成
- eclipse maven
IXHONG
eclipse
eclipse中使用maven插件的时候,运行run as maven build的时候报错
-Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match.
可以设一个环境变量M2_HOME指
- timer cancel方法的一个小实例
alleni123
多线程timer
package com.lj.timer;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class MyTimer extends TimerTask
{
private int a;
private Timer timer;
pub
- MySQL数据库在Linux下的安装
ducklsl
mysql
1.建好一个专门放置MySQL的目录
/mysql/db数据库目录
/mysql/data数据库数据文件目录
2.配置用户,添加专门的MySQL管理用户
>groupadd mysql ----添加用户组
>useradd -g mysql mysql ----在mysql用户组中添加一个mysql用户
3.配置,生成并安装MySQL
>cmake -D
- spring------>>cvc-elt.1: Cannot find the declaration of element
Array_06
springbean
将--------
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3
- maven发布第三方jar的一些问题
cugfy
maven
maven中发布 第三方jar到nexus仓库使用的是 deploy:deploy-file命令
有许多参数,具体可查看
http://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html
以下是一个例子:
mvn deploy:deploy-file -DgroupId=xpp3
- MYSQL下载及安装
357029540
mysql
好久没有去安装过MYSQL,今天自己在安装完MYSQL过后用navicat for mysql去厕测试链接的时候出现了10061的问题,因为的的MYSQL是最新版本为5.6.24,所以下载的文件夹里没有my.ini文件,所以在网上找了很多方法还是没有找到怎么解决问题,最后看到了一篇百度经验里有这个的介绍,按照其步骤也完成了安装,在这里给大家分享下这个链接的地址
- ios TableView cell的布局
张亚雄
tableview
cell.imageView.image = [UIImage imageNamed:[imageArray objectAtIndex:[indexPath row]]];
CGSize itemSize = CGSizeMake(60, 50);
&nbs
- Java编码转义
adminjun
java编码转义
import java.io.UnsupportedEncodingException;
/**
* 转换字符串的编码
*/
public class ChangeCharset {
/** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 */
public static final Strin
- Tomcat 配置和spring
aijuans
spring
简介
Tomcat启动时,先找系统变量CATALINA_BASE,如果没有,则找CATALINA_HOME。然后找这个变量所指的目录下的conf文件夹,从中读取配置文件。最重要的配置文件:server.xml 。要配置tomcat,基本上了解server.xml,context.xml和web.xml。
Server.xml -- tomcat主
- Java打印当前目录下的所有子目录和文件
ayaoxinchao
递归File
其实这个没啥技术含量,大湿们不要操笑哦,只是做一个简单的记录,简单用了一下递归算法。
import java.io.File;
/**
* @author Perlin
* @date 2014-6-30
*/
public class PrintDirectory {
public static void printDirectory(File f
- linux安装mysql出现libs报冲突解决
BigBird2012
linux
linux安装mysql出现libs报冲突解决
安装mysql出现
file /usr/share/mysql/ukrainian/errmsg.sys from install of MySQL-server-5.5.33-1.linux2.6.i386 conflicts with file from package mysql-libs-5.1.61-4.el6.i686
- jedis连接池使用实例
bijian1013
redisjedis连接池jedis
实例代码:
package com.bijian.study;
import java.util.ArrayList;
import java.util.List;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoo
- 关于朋友
bingyingao
朋友兴趣爱好维持
成为朋友的必要条件:
志相同,道不合,可以成为朋友。譬如马云、周星驰一个是商人,一个是影星,可谓道不同,但都很有梦想,都要在各自领域里做到最好,当他们遇到一起,互相欣赏,可以畅谈两个小时。
志不同,道相合,也可以成为朋友。譬如有时候看到两个一个成绩很好每次考试争做第一,一个成绩很差的同学是好朋友。他们志向不相同,但他
- 【Spark七十九】Spark RDD API一
bit1129
spark
aggregate
package spark.examples.rddapi
import org.apache.spark.{SparkConf, SparkContext}
//测试RDD的aggregate方法
object AggregateTest {
def main(args: Array[String]) {
val conf = new Spar
- ktap 0.1 released
bookjovi
kerneltracing
Dear,
I'm pleased to announce that ktap release v0.1, this is the first official
release of ktap project, it is expected that this release is not fully
functional or very stable and we welcome bu
- 能保存Properties文件注释的Properties工具类
BrokenDreams
properties
今天遇到一个小需求:由于java.util.Properties读取属性文件时会忽略注释,当写回去的时候,注释都没了。恰好一个项目中的配置文件会在部署后被某个Java程序修改一下,但修改了之后注释全没了,可能会给以后的参数调整带来困难。所以要解决这个问题。
&nb
- 读《研磨设计模式》-代码笔记-外观模式-Facade
bylijinnan
java设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
/*
* 百度百科的定义:
* Facade(外观)模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,
* 隐藏子系统的复杂性,使子系统更加容易使用。他是为子系统中的一组接口所提供的一个一致的界面
*
* 可简单地
- After Effects教程收集
cherishLC
After Effects
1、中文入门
http://study.163.com/course/courseMain.htm?courseId=730009
2、videocopilot英文入门教程(中文字幕)
http://www.youku.com/playlist_show/id_17893193.html
英文原址:
http://www.videocopilot.net/basic/
素
- Linux Apache 安装过程
crabdave
apache
Linux Apache 安装过程
下载新版本:
apr-1.4.2.tar.gz(下载网站:http://apr.apache.org/download.cgi)
apr-util-1.3.9.tar.gz(下载网站:http://apr.apache.org/download.cgi)
httpd-2.2.15.tar.gz(下载网站:http://httpd.apac
- Shell学习 之 变量赋值和引用
daizj
shell变量引用赋值
本文转自:http://www.cnblogs.com/papam/articles/1548679.html
Shell编程中,使用变量无需事先声明,同时变量名的命名须遵循如下规则:
首个字符必须为字母(a-z,A-Z)
中间不能有空格,可以使用下划线(_)
不能使用标点符号
不能使用bash里的关键字(可用help命令查看保留关键字)
需要给变量赋值时,可以这么写:
- Java SE 第一讲(Java SE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行)
dcj3sjt126com
javajdk
Java SE 第一讲:
Java SE:Java Standard Edition
Java ME: Java Mobile Edition
Java EE:Java Enterprise Edition
Java是由Sun公司推出的(今年初被Oracle公司收购)。
收购价格:74亿美金
J2SE、J2ME、J2EE
JDK:Java Development
- YII给用户登录加上验证码
dcj3sjt126com
yii
1、在SiteController中添加如下代码:
/**
* Declares class-based actions.
*/
public function actions() {
return array(
// captcha action renders the CAPTCHA image displ
- Lucene使用说明
dyy_gusi
Lucenesearch分词器
Lucene使用说明
1、lucene简介
1.1、什么是lucene
Lucene是一个全文搜索框架,而不是应用产品。因此它并不像baidu或者googleDesktop那种拿来就能用,它只是提供了一种工具让你能实现这些产品和功能。
1.2、lucene能做什么
要回答这个问题,先要了解lucene的本质。实际
- 学习编程并不难,做到以下几点即可!
gcq511120594
数据结构编程算法
不论你是想自己设计游戏,还是开发iPhone或安卓手机上的应用,还是仅仅为了娱乐,学习编程语言都是一条必经之路。编程语言种类繁多,用途各 异,然而一旦掌握其中之一,其他的也就迎刃而解。作为初学者,你可能要先从Java或HTML开始学,一旦掌握了一门编程语言,你就发挥无穷的想象,开发 各种神奇的软件啦。
1、确定目标
学习编程语言既充满乐趣,又充满挑战。有些花费多年时间学习一门编程语言的大学生到
- Java面试十问之三:Java与C++内存回收机制的差别
HNUlanwei
javaC++finalize()堆栈内存回收
大家知道, Java 除了那 8 种基本类型以外,其他都是对象类型(又称为引用类型)的数据。 JVM 会把程序创建的对象存放在堆空间中,那什么又是堆空间呢?其实,堆( Heap)是一个运行时的数据存储区,从它可以分配大小各异的空间。一般,运行时的数据存储区有堆( Heap)和堆栈( Stack),所以要先看它们里面可以分配哪些类型的对象实体,然后才知道如何均衡使用这两种存储区。一般来说,栈中存放的
- 第二章 Nginx+Lua开发入门
jinnianshilongnian
nginxlua
Nginx入门
本文目的是学习Nginx+Lua开发,对于Nginx基本知识可以参考如下文章:
nginx启动、关闭、重启
http://www.cnblogs.com/derekchen/archive/2011/02/17/1957209.html
agentzh 的 Nginx 教程
http://openresty.org/download/agentzh-nginx-tutor
- MongoDB windows安装 基本命令
liyonghui160com
windows安装
安装目录:
D:\MongoDB\
新建目录
D:\MongoDB\data\db
4.启动进城:
cd D:\MongoDB\bin
mongod -dbpath D:\MongoDB\data\db
&n
- Linux下通过源码编译安装程序
pda158
linux
一、程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 库文件:就是通常我们见到的lib目录下的文件 配置文件:这个不必多说,都知道 帮助文档:通常是我们在linux下用man命令查看的命令的文档
二、linux下程序的存放目录 linux程序的存放目录大致有三个地方: /etc, /b
- WEB开发编程的职业生涯4个阶段
shw3588
编程Web工作生活
觉得自己什么都会
2007年从学校毕业,凭借自己原创的ASP毕业设计,以为自己很厉害似的,信心满满去东莞找工作,找面试成功率确实很高,只是工资不高,但依旧无法磨灭那过分的自信,那时候什么考勤系统、什么OA系统、什么ERP,什么都觉得有信心,这样的生涯大概持续了约一年。
根本不是自己想的那样
2008年开始接触很多工作相关的东西,发现太多东西自己根本不会,都需要去学,不管是asp还是js,
- 遭遇jsonp同域下变作post请求的坑
vb2005xu
jsonp同域post
今天迁移一个站点时遇到一个坑爹问题,同一个jsonp接口在跨域时都能调用成功,但是在同域下调用虽然成功,但是数据却有问题. 此处贴出我的后端代码片段
$mi_id = htmlspecialchars(trim($_GET['mi_id ']));
$mi_cv = htmlspecialchars(trim($_GET['mi_cv ']));
贴出我前端代码片段:
$.aj