小编ddd*_*ddd的帖子

Spring + Oauth2:如何刷新访问令牌

我正在使用 Spring Boot 构建休息 Web 服务。身份验证是使用 Spring Security 和 OAuth2 实现的。用户通过 LDAP 服务器进行身份验证。这是我的 websecurityconfig

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {


    @Autowired
    private RestAuthenticationSuccessHandler authenticationSuccessHandler;
    @Autowired
    private RestAuthenticationEntryPoint restAuthenticationEntryPoint;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http

            .httpBasic()
            .and()
            .csrf().disable()
            .sessionManagement().sessionCreationPolicy(
                    SessionCreationPolicy.STATELESS)
            .and()
            .exceptionHandling()
            .authenticationEntryPoint(restAuthenticationEntryPoint)
            .and()
            .authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/login").permitAll()
                .antMatchers("/logout").permitAll()
                .antMatchers("/ristore/**").authenticated()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .successHandler(authenticationSuccessHandler)
                .failureHandler(new SimpleUrlAuthenticationFailureHandler());
    }

    @Override  
    @Bean  
    public AuthenticationManager authenticationManagerBean() throws Exception {  
        return super.authenticationManagerBean();  
    }

    @Bean
    public RestAuthenticationSuccessHandler mySuccessHandler(){
        return new RestAuthenticationSuccessHandler();
    }
    @Bean …
Run Code Online (Sandbox Code Playgroud)

rest access-token oauth-2.0 spring-security-ldap spring-boot

5
推荐指数
0
解决办法
2294
查看次数

git rebase是否会影响远程分支或本地分支

我在我的分支上工作,称为"角色".远程主站正在频繁更新.所以在我将更改提交到远程分支后,我需要在最新的master上重新分支.所以这是我的步骤:

# from local
git add .
git commit 'Add feature'
git push origin role

# rebase
git pull --rebase origin master
Run Code Online (Sandbox Code Playgroud)

rebase是否仅影响本地分支或远程分支或两者?如果只有本地分支重新定位,我应该在rebase之后再次承诺原点吗?

git branch rebase

5
推荐指数
1
解决办法
4294
查看次数

Postgres:“真空”命令不能清理死元组

我们在Amazon RDS中有一个postgres数据库。最初,我们需要快速加载大量数据,因此autovacuum根据Amazon最佳实践建议将其关闭。最近,我在运行查询时注意到一些性能问题。然后我意识到它已经很长时间没有被清理干净了。事实证明,许多表都有很多死元组。

在此处输入图片说明

令人惊讶的是,即使我vacuum在某些表上手动运行了命令,它似乎也根本没有删除这些无效的元组。vacuum full需要太长时间才能完成,通常一整夜后超时。

为什么vacuum命令不起作用?我还有其他选择,重新启动实例吗?

postgresql vacuum

5
推荐指数
1
解决办法
2648
查看次数

如何在 Amazon RDS 中关闭与 Postgres 数据库的空闲连接

我们在 RDS 中设置了一个 Postgres 数据库。我编写了一些 API 来使用 Spring Boot 处理对数据库的数据摄取。最近我发现很多连接在调用 API 后仍然保持会话活动。一些会议可以追溯到 3 个月前。

我想知道是否有办法在一段时间不活动后自动关闭这些连接。从如何自动关闭 PostgreSQL 中的空闲连接?, 看起来我可以设置一个 cron 作业来查找带有 SQL 查询的死连接并用pg_trminate_backend. 这是最好的选择吗?web应用层有什么可以做的吗?或者也许是一些 RDS 参数?在这方面需要一些建议。

postgresql amazon-rds spring-boot

5
推荐指数
1
解决办法
9970
查看次数

如何将数据从一个 AWS 账户的 RDS 移动到另一个账户

我们不久前在 AWS 上设置了 Web 服务和数据库,应用程序现已投入生产。由于某种原因,我们需要终止旧的 AWS 并将所有内容转移到新创建的 AWS 帐户下。应用程序和所有基础设施都非常简单。但对于数据来说,这比较棘手。当前的数据库每天仍在接收大量数据。因此,最好在关闭旧应用程序并切换到新平台后迁移数据。

源 RDS 和目标 RDS 都是 Postgres。我们有大约 40GB 的数据要传输。我能想到三种方法,它们都有缺点。

  1. 拍摄第一个 RDS 的快照并在第二个 RDS 中恢复它。问题是我不需要将所有数据从源传输到目的地。可能只需要 10 月 1 日之后的记录就足够了。此外,快照最适合在刚刚创建的空 rds 中恢复。对于我们的例子,新的 RDS 将在截止后开始接收数据。只有在那之后,数据才会从旧帐户转移到新帐户,否则我们将丢失数据。
  2. 从旧 RDS 中的表中转储数据并在新 RDS 中备份。这将有与#1 相同的问题。另外,如果我将数据转储到本地机器,然后从本地备份,网络速度是瓶颈。
  3. 将表数据导出到 csv 文件并导入到新的 RDS。优点是这种方法允许挑选和一些数据清理。但将大型事实表导出到本地 csv 文件需要很长时间。另一个问题是,对于某些表,我有代理行 ID serial(自动增量)。导出的 csv 的行 ID 可能与新 RDS 表中的现有数据冲突。

我想知道是否有更好的方法来做到这一点。也许AWS有一些ETL工具可以点对点直接传输,而不需要使用本地计算机作为中间点。

postgresql etl data-migration amazon-web-services amazon-rds

5
推荐指数
1
解决办法
9505
查看次数

如何使用 sagemaker 对 Pandas 数据框进行预测

我正在使用 Sagemaker 来训练和部署我的机器学习模型。至于预测,它将由 lambda 函数作为预定作业(每小时)执行。过程如下:

  1. 自上次预测以来从 S3 中提取新数据
  2. 预处理、聚合和创建预测数据集
  3. 调用 sagemaker 端点并进行预测
  4. 将结果保存到 s3 或插入到数据库表

根据我的发现,通常输入将来自 lambda 有效载荷

data = json.loads(json.dumps(event))
payload = data['data']
print(payload)

response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME,
                                   ContentType='text/csv',
                                   Body=payload)
Run Code Online (Sandbox Code Playgroud)

或从 s3 文件中读取: my_bucket = resource.Bucket('pred_data') #将其替换为您的 s3 存储桶名称。

obj = client.get_object(Bucket=my_bucket, Key='foo.csv')
lines= obj['Body'].read().decode('utf-8').splitlines()
reader = csv.reader(lines)
file = io.StringIO(lines)


response = runtime.invoke_endpoint(EndpointName=ENDPOINT,
                                   ContentType='*/*',
                                   Body = file.getvalue(),
                                   Body=payload)
output = response['Body'].read().decode('utf-8')
Run Code Online (Sandbox Code Playgroud)

由于我将从 s3 中提取原始数据并进行预处理,pandas因此将生成一个数据帧。是否可以直接将其作为 的输入invoke_endpoint?我可以上传的数据集中汇总到另一个S3存储,但它必须要经过decodingcsv.readerStringIO和一切就像我发现还是有一个简单的方法来做到这一点的例子吗?这decode一步真的需要得到输出吗?

lambda inference pandas amazon-sagemaker

5
推荐指数
1
解决办法
770
查看次数

如何使用maven发布插件跳过集成测试

我想在使用命令运行maven release plugin时跳过集成测试

mvn -B -DskipITs release:prepare release:perform
Run Code Online (Sandbox Code Playgroud)

它似乎没有这种方式.相同的选项-DskipITs适用于mvn install/deploy.我不想使用,-Dmaven.test.skip=true因为只需要忽略集成测试,而不是单元测试.完成此任务的最佳方法是什么?

编辑: -Darguments=-DskipITs工程release:prepare,但令人惊讶它确实进行工作release:perform.试过-Darguments=-Dmaven.test.skip=true,也不起作用.

试图<arguments>skipITs</arguments>在pom中添加发布插件,但它会忽略-Darguments命令行中提供的所有其他插件.我不能在插件配置中配置所有内容,因为有些选项会动态获取环境变量.

java integration-testing maven maven-release-plugin

4
推荐指数
1
解决办法
2010
查看次数

为什么 Elastic Beanstalk 创建两个安全组?

我正在尝试使用 AWS Elastic Beanstalk 部署 Spring Boot 应用程序。我没有使用环境的默认设置,而是修改了“VPC”下的某些内容。在为 VPC 选择可用区域和安全组之一后,我创建了环境。 在此输入图像描述

但是,当我在创建实例后查看实例详细信息时,我注意到它与两个安全组相关联。除了我选择的安全组之外sg-98c031f3,它还有另一个新生成的安全组sg-72b94919

当我只选择一个安全组时,为什么它会为环境创建两个安全组?有没有办法删除其中一个,因为一个安全组足以处理所有规则。

amazon-web-services amazon-vpc amazon-elastic-beanstalk aws-security-group

4
推荐指数
1
解决办法
2244
查看次数

订阅频道前如何获取发布到Redis的消息

我正在编写一个应用程序来获取发布到 Redis 中的通道的消息并处理它们。这是一个长期存在的应用程序,基本上从不监听频道。

def msg_handler():
    r = redis.client.StrictRedis(host='localhost', port=6379, db=0)
    sub = r.pubsub()
    sub.subscribe(settings.REDIS_CHANNEL)
    while True:
        msg = sub.get_message()
        if msg:
            if msg['type'] == 'message':
                print(msg)
def main():

    for i in range(3):
        t = threading.Thread(target=msg_handler, name='worker-%s' % i)
        print('thread {}'.format(i))
        t.setDaemon(True)
        t.start()
    while True:
        print('Waiting')
        time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

当我运行该程序时,我注意到它没有获取在程序启动之前发布到通道的消息。在应用程序订阅频道后,可以很好地获取发送到频道的消息。

在生产中,很可能在程序开始之前通道中存在一些消息。有没有办法获取这些旧消息?

python publish-subscribe redis

4
推荐指数
1
解决办法
3971
查看次数

如何向后返回带有参数的新函数

我想用Python编写一个函数.给定一个函数,返回一个新函数,该函数向后运行带有参数的原始函数.例如,输入函数funcpow,所以func(2,3)= 8.返回的新函数将执行pow(3,2)= 9.

我在另一篇文章中找到了此解决方案

def flip(func):
        'Create a new function from the original with the arguments reversed'
        @wraps(func)
        def newfunc(*args):
            return func(*args[::-1])
        return newfunc
Run Code Online (Sandbox Code Playgroud)

有没有办法没有@wrap?参数的数量是未知的.它可以是任何类型:int, string. 所以我想要的函数只接受一个参数,它是原始函数的名称.

reverse_args(f)
Run Code Online (Sandbox Code Playgroud)

在调用时,*args将遵循:

reverse_args(func)(*args)
Run Code Online (Sandbox Code Playgroud)

python function decorator args

4
推荐指数
1
解决办法
749
查看次数